2016-08-31 2 views
0

내가 원하는 것

포함 템플릿 템플릿을 사용할 때 사용 횟수를 반환하고 중단하지 않는 포함 Templatetag. 문맥에서 스토리지 카운터를 시도했지만 의도 한대로 작동하지 않습니다.카운터가 포함 된 템플릿 템플릿 카운터

base.html

{% block body %} 
    {% my_tag %}<br> 
    {% my_tag %}<br> 
{% endblock %} 

page.html

{% extends 'base.html' %} 
{% block body %} 
    {{ block super }} 
    {% my_tag %}<br> 
    {% my_tag %}<br> 
{% endblock %} 

렌더링 결과 :

1 
2 
3 
4 

내가 뭘하려

@register.inclusion_tag('tagtemplate.html', takes_context=True) 
def my_tag(context): 
    counter = context.get('tag_counter', 1) 
    ctx = {'tag_counter': counter} 
    context['tag_counter'] = counter + 1 
    return ctx 

그리고 결과 : 근무

1 
2 
1 
2 

그리고 무엇 는 카운터 추가

추가 미들웨어는 @SardorbekImomaliev에

@register.inclusion_tag('tagtemplate.html', takes_context=True) 
def my_tag(context): 
    request = context.get['request'] 
    ctx = {'tag_counter': request.tag_counter} 
    request.tag_counter += 1 
    return ctx 

감사를

class TagCounterMiddleware(object): 
    def process_request(self, request): 
     request.tag_counter = 1 

및 변경된 템플릿 태그를 요청하는 자신의 암시! :)

+0

'요청'에 카운터를 넣는 것이 좋습니다. –

+0

@SardorbekImomaliev 제발, 잘 작동했기 때문에 답을 달아주세요 :) – krzyh

+0

제출 됨. 천만에요. –

답변

1

나는 카운터를 request에 넣는 것이 좋습니다. 이 같은.

# This code wasn't checked 
@register.inclusion_tag('tagtemplate.html', takes_context=True) 
def my_tag(context): 
    request = context.get('request') 
    counter = getattr(request, 'tag_counter', 0) 
    request.tag_counter = counter + 1 
    context['request'] = request 
    return context 
+0

'request.tag_counter'를 선언했지만'request'가 어디서 왔는지 알지 못합니다. 나는이 글이 오래된 글이라는 것을 알고 있지만, 아마도 이것을 분명히 할 수있을 것입니다. – cezar

+0

@cezar 고정. 또한 https://stackoverflow.com/a/2160298/3627387을 읽어보십시오. –