2016-08-31 3 views
0

私が欲しいもの

インクルージョンテンプレートの継承を使用すると使用回数が戻ったり折れたりしません。私は文脈でストレージカウンタを試しましたが、意図したとおりに動作しません。インクルードtemplatetag with counter

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へ

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

と変更されたテンプレートタグ

@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 

感謝を要求するためにカウンタを追加

追加ミドルウェアを働きました提案! :)

+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もお読みください –