2009-08-12 6 views
9

DB'de kaydedilmiş isteğe bağlı bir numarayı, yaptığım özel bir şablon etiketine almam gerekir. Bu galeride yer alan bir değişken (fotoğraflı kimlik). galeri döngüsünde.Django-Template: Bir Etiket bloğunda Değişkenler alın!

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

Bunu nasıl başarmalı?!

P.s: Bunu ekleme etiketiyle yapılabileceğini biliyorum, ancak şimdiki zamanda bunu nasıl düzeltmesi gerekiyor!

Düzen şablon html dosyası:

{% 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 bir sayı ile ({% get_latest_photo photo.id%} olarak) i album.id değiştirdiğinizde çok iyi çalışıyor

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 Onun Bu, bir albüm kimliği olarak hareket eder ve fotoğrafı çeker. Şablon etiketleri kullanıldıklarında

Selamlar H. M.

+0

Bize kodun nasıl davrandığını anlatırsanız, size cevap vermemiz daha kolay olacaktır. –

+0

Etiketin kodunu gönderir misiniz? –

cevap

5

doğru ben değiştirmek gerektiğini düşünüyorum num değişkeni değerlendirmek sizin sınıf böyle LatestPhotoNode: Örneğin, düzgün değişkenlerin değerlerini almak için Variable.resolve kullanmak gerekir

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

Teşekkür ederim, zaten bunu kullanarak düzeltildi. onun basit – Hamza

+0

Filtre uygulanmış değeri ile nasıl çalışır? gibi {% url_parameter tags = tag | slugify%} ' – tutuca

8

Sen değişkenler etrafında parantez koymayın.

{% get_latest_photo photo.id %} 
+0

, parantezleri eklemeden önce hiç işe yaramadı! – Hamza

+0

Teşekkür ederiz düzeltildi :) – Hamza

3

Şablon etiketinizin düzgün yazıldığından emin misiniz? Passing Template Variables to the Tag

+0

Merhaba Ned, Variable.resolve nasıl kullanılır, şu an için arama yapıyorum, lütfen bana bir örnek bağlayabilir misiniz?! – Hamza

+0

Fotoğrafları filtreleyen ve bu albümle eklenen en son fotoğrafı alacağınız klasik bir özel şablon etiketi. Ana Soruyu Düzenledim. – Hamza

+0

Hmm, Kısa bir süre sonra, ancak bir şekilde Özel Şablon etiketinin sorun olmadığını, bir fotoğraf filtresiyle fotoğrafla değiştirdiğimde çok iyi çalıştığına inanıyorum. – Hamza

1

Ben aynı sorunu sorunu vardı ve reading the docs sonra, sana ren çalışıyorsanız bu

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

kullanarak çözüldü Birden çok değişken der, json.dumps kullanarak çok kullanışlıdır.