【问题标题】:Template tag is not working as intended in if-sentence模板标签在 if 句中没有按预期工作
【发布时间】:2014-10-22 00:23:37
【问题描述】:

我制作了一个非常简单的模板标签,用于检查设置文件是用于生产还是开发。但是好像不能在if语句中使用返回值?

我的标签:

from django.conf import settings

@register.simple_tag
def is_production():
    return settings.SETTINGS_MODE == 'Production'

在我的模板中:

{% if is_production %}
....
{% endif %}

当我打印变量 {% is_production %} 时,它在我的模板中返回 True/False,但除此之外它在我的 if 中不起作用。

我做错了什么?

【问题讨论】:

  • 这不是模板标签的作用。您最好使用上下文处理器自动将该变量添加到模板上下文中。
  • @DanielRoseman,你能举个例子吗?我基本上使用我的base.html 中的变量,它由实际模板扩展。我认为从我需要区分生产代码和开发代码的非常简单的数据中制作火箭科学没有任何意义。

标签: python django django-views django-templates


【解决方案1】:

这是你必须做的:

在 templatetags/my_tag.py 中添加这个而不是你的模板标签

from django import template

register = template.Library()

class IsProductionAreaNode(template.Node):
    def __init__(self, nodelist):
        self.nodelist = nodelist

    def render(self, context):
        if settings.SETTINGS_MODE == 'Production':
            return self.nodelist.render(context)
        else:
            return ''


def do_is_production(parser, token):
    nodelist = parser.parse(('endis_production',))
    parser.delete_first_token()
    return IsProductionAreaNode(nodelist)

register.tag('is_production', do_is_production)

现在在您的模板中执行以下操作:

{% load my_tag %}
.
.
.

{% is_production %}
    *content*
{% endis_production %}

【讨论】:

    【解决方案2】:

    这是一个常见的 sn-p:https://djangosnippets.org/snippets/1538/

    但在您的情况下,我建议在视图中设置上下文变量is_production

    【讨论】:

      猜你喜欢
      • 2022-11-26
      • 2011-11-29
      • 1970-01-01
      • 2017-06-18
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 2012-06-23
      • 2020-07-26
      相关资源
      最近更新 更多