2009-08-12 5 views
9

나는 DB에 저장된 선택적인 번호를 내가 만든 커스텀 템플리트 태그로 가져와야한다. 이 갤러리에 포함 된 변수 (사진 ID)를 검색합니다. 갤러리 루프 내에서.Django-Template : 태그 블록에서 변수 가져 오기!

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

어떻게 수행할까요?!

P.s : 포함 태그를 사용하여 수행 할 수 있음을 알고 있지만 현재로서는이 문제를 해결하는 방법을 알고 있습니다.

편집 템플릿 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 숫자로 ({% get_latest_photo photo.id %}에서) 내가 album.id 교체 할 때 매우 잘 작동

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) 

시 그 앨범 ID로 작동하고 사진을 검색합니다. 당신은 템플릿 태그를 사용할 때

감사 H. M.는

+0

코드가 잘못 표시되는 방법을 알려 주시면 답변을 제공하는 것이 더 쉬울 것입니다. –

+0

태그의 코드를 게시 할 수 있습니까? –

답변

5

제대로 난 당신이 수정해야합니다 생각 NUM 변수를 평가하기 위해 당신의 클래스 같은 LatestPhotoNode : 예를 들어, 당신은 제대로 변수의 값을 얻을 수 Variable.resolve를 사용할 필요가

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

고맙습니다. 이미 이것을 사용하여 고쳐 주셔서 감사합니다. 단순한 – Hamza

+0

필터링 된 값으로 어떻게 작동합니까? '{% url_parameter tags = tag | slugify %}'와 같이 – tutuca

8

당신은 변수 주위에 괄호를 넣어하지 않습니다.

{% get_latest_photo photo.id %} 
+0

괄호를 추가하기 전에 시도했지만 전혀 작동하지 않았습니다! – Hamza

+0

고쳐 주셔서 감사합니다 :) – Hamza

3

템플릿 태그가 올바르게 작성 되었습니까? Passing Template Variables to the Tag

+0

안녕 Ned, Variable.resolve를 사용하는 방법, 지금 검색 중입니다. – Hamza

+0

사진을 필터링하고이 앨범에 추가 된 최신 사진을 얻는 고전적인 맞춤 템플릿 태그입니다. 나는 주요 질문을 편집했다. – Hamza

+0

흠, 곧 할 것입니다. 그러나 어쨌든 나는 사용자 정의 템플릿 태그가 문제가 아니라고 생각합니다. 왜냐하면 album.id로 사진을 필터링하여 숫자로 photo.id를 대체 할 때 아주 잘 작동하기 때문입니다! – Hamza

1

저도 같은 문제가 문제가 있었 및 reading the docs 후, 나는 당신이 르네하려는 경우이

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

를 사용하여 해결 여러 변수를 사용하여 json.dumps을 사용하면 매우 유용합니다.

관련 문제