2009-08-12 11 views
9

Ho bisogno di recuperare un numero opzionale salvato in DB, su un tag modello personalizzato che ho creato. quale recuperare, una variabile (un documento d'identità) inclusa in questa galleria. all'interno del ciclo della galleria.Template Django: ottieni variabili in un blocco di tag!

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

Come eseguire ciò?!

P.s: So che può essere fatto con il tag di inclusione, ma nel tempo presente come farlo risolvere questo!

Modificare il file template 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 Il suo lavoro molto bene quando i sostituire album.id (in {% get_latest_photo photo.id%}) con un numero che funge da id per l'album e recupera la foto da.

saluti H. M.

+0

Se ci dici come il codice si comporta male, sarà più facile per noi darti delle risposte. –

+0

Puoi pubblicare il codice del tag? –

risposta

5

Per valutare correttamente la variabile num penso che si dovrebbe modificare la LatestPhotoNode classe come questa:

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

Grazie, l'ho già risolto usando questo. è semplice – Hamza

+0

Come si fa a farlo funzionare con il valore filtrato? come in '{% url_parameter tags = tag | slugify%}' – tutuca

8

non mettere le parentesi intorno variabili quando si utilizzano in tag modello.

{% get_latest_photo photo.id %} 
+0

provato prima di aggiungere le parentesi ma non ha funzionato affatto! – Hamza

+0

Grazie per averlo risolto :) – Hamza

3

Sei sicuro che il tag del modello sia stato scritto correttamente? Ad esempio, è necessario utilizzare Variable.resolve per ottenere correttamente i valori delle variabili: Passing Template Variables to the Tag

+0

Ciao Ned, Come usare Variable.resolve, sto cercando adesso, puoi collegarmi un esempio per favore ?! – Hamza

+0

Solo un classico tag modello personalizzato che filtrerà le foto e otterrà l'ultima foto aggiunta con questo album. Ho modificato la domanda principale. – Hamza

+0

Hmm, Lo farò presto, ma in qualche modo credo che il tag Custom Template non sia il problema, perché funziona molto bene quando sostituisco il photo.id con un numero con filtro Photo con l'album.id! – Hamza

1

ho avuto lo stesso problema problema e dopo reading the docs, ho risolto utilizzando questo

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 '' 

Se si sta cercando di ren der multiple variables, using json.dumps è molto utile.

Problemi correlati