2009-08-12 4 views
9

Potrzebuję pobrać opcjonalny numer zapisany w DB, do niestandardowego tagu szablonu, który zrobiłem. które do pobrania, zmienna (identyfikator zdjęcia) zawarta w tej galerii. w pętli galerii.Django-Template: pobierz zmienne w bloku tagu!

{% get_latest_photo {{photo.id}} %} 

Jak to osiągnąć?!

P.s: Wiem, że można to zrobić za pomocą tagu włączającego, ale w chwili obecnej, jak go naprawić to!

Edytuj plik szablonu html:

{% for album in albumslist %} 

    {% get_latest_photo photo.id %} 
    {% for photo in recent_photos %} 
<img src='{% thumbnail photo.image 200x80 crop,upscale %}' alt='{{ photo.title }}' /> 
    {% endfor %} 
    {{ album.title }} 
{% endfor %} 

templatetag

from django.template import Library, Node 
from akari.main.models import * 
from django.db.models import get_model 

register = Library() 

class LatestPhotoNode(Node): 
    def __init__(self, num): 
     self.num = num 
    def render(self, context): 
     photo = Photo.objects.filter(akar=self.num)[:1] 
     context['recent_photos'] = photo 
     return '' 

def get_latest_photo(parser, token): 
    bits = token.contents.split() 
    return LatestPhotoNode(bits[1]) 

get_latest_photo = register.tag(get_latest_photo) 

Ps jego pracy bardzo dobrze, kiedy wymienić album.id (w {% get_latest_photo photo.id%}) z numerem który działa jako identyfikator albumu i pobiera zdjęcie z.

Pozdrowienia H. M.

+0

Jeśli powiesz nam, jak kod działa nieprawidłowo, łatwiej nam będzie udzielić Ci odpowiedzi. –

+0

Czy możesz umieścić kod znacznika? –

Odpowiedz

5

Aby ocenić poprawnie num zmienną myślę, że należy zmodyfikować LatestPhotoNode klasa tak:

class LatestPhotoNode(Node): 
    def __init__(self, num): 
     self.num = template.Variable(num) 

    def render(self, context): 
     num = self.variable.resolve(self.num) 
     photo = Photo.objects.filter(akar=num)[:1] 
     context['recent_photos'] = photo 
     return '' 
+0

Dziękuję, już to naprawiłem, używając tego. jego prosty – Hamza

+0

Jak to działa, aby działało z filtrowaną wartością? jak w '{% url_parameter tags = tag | slugify%}' – tutuca

8

nie umieścić wsporniki wokół zmiennych kiedy ich używać znaczników w szablonie.

{% get_latest_photo photo.id %} 
+0

próbowałem, zanim dodałem nawiasy, ale w ogóle nie działałem! – Hamza

+0

Naprawiłem to :) – Hamza

3

Czy jesteś pewien, że Twój znacznik szablonu jest poprawnie zapisany? Na przykład, trzeba użyć Variable.resolve aby prawidłowo uzyskać wartości zmiennych: Passing Template Variables to the Tag

+0

Witaj Ned, Jak korzystać z Variable.resolve, szukam o tym teraz, czy możesz podać mi przykład? – Hamza

+0

Po prostu klasyczny niestandardowy tag szablonu, który odfiltruje zdjęcia i uzyska najnowsze zdjęcie dodane do tego albumu. Zmieniłem główne pytanie. – Hamza

+0

Hmm, Wkrótce, ale jakoś wierzę, że tag Custom Template nie jest problemem, ponieważ działa bardzo dobrze, gdy zastępuję photo.id numerem z filtrem Photo with the album.id! – Hamza

1

miałem ten sam problem i po reading the docs problemu, mam rozwiązać go za pomocą tego

class LatestPhotoNode(Node): 
    def __init__(self, num): 
     self.num = template.Variable(num) 

    def render(self, context): 
     num = self.num.resolve(context) 
     photo = Photo.objects.filter(akar=num)[:1] 
     context['recent_photos'] = photo 
     return '' 

Jeśli próbujesz ren wiele zmiennych, bardzo przydatne jest użycie json.dumps.