【问题标题】:Inclusion templatetag with counter包含带有计数器的模板标签
【发布时间】:2017-01-07 17:01:06
【问题描述】:

我想要什么

包含模板标签,它返回使用次数并且在使用模板继承时不会中断。我尝试在上下文中存储计数器,但它没有按我的预期工作。

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

什么有效

添加了向请求添加计数器的中间件

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

感谢@SardorbekImomaliev 的建议! :)

【问题讨论】:

  • 我建议把你的柜台放在request
  • @SardorbekImomaliev 请提交您的评论作为答案,因为它运作良好:)
  • 已提交。不客气。

标签: python django python-2.7 django-templates django-views


【解决方案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 

【讨论】:

  • 您声明了request.tag_counter,但我看不出request 的来源。我知道这是一篇旧帖子,但也许您仍然可以澄清这一点。
猜你喜欢
  • 2016-05-27
  • 2021-05-24
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-07
  • 2016-08-12
相关资源
最近更新 更多