在{%if%}块中为自定义模板标记提供参数的语法

时间:2014-09-03 13:08:30

标签: django django-templates

我已经设置了一个自定义模板标记(simple_tag)(使用https://stackoverflow.com/a/7716141/1369798),其定义如下:

templatetags / polls_extras.py

def settings_value(name)

我可以在我的模板中使用,如下所示:

模板/ index.html中

{% settings_value "ALLOWED_BOOL" %}

但这只是将文本插入我的HTML输出中。

在{%if%}中使用带有参数的模板标记的语法是什么?

我尝试了这个但是我收到了错误: TemplateSyntaxError at / Unused'" ALLOWED_BOOL"'在表达式结束时。

模板/ index.html中

{% if settings_value ALLOWED_BOOL %}
You are allowed.
{% endif %}

1 个答案:

答案 0 :(得分:1)

您不能将templatetag用作其他模板标签的参数。你在这里的选择是

  1. 修改您的settings_value模板标签,以便它可以在当前上下文中注入值,即:

    {%settings_value ALLOWED_BOOL as allowed_bool%} {%if allowed_bool%}   你被允许。 {%endif%}

  2. 请注意simple_tag在这里不起作用,你必须切换到assignement_tag(如果你的Django版本支持它) - 但是你将失去直接输出的能力在模板中按照实际的方式设置 - 或者写一个完整的自定义模板标签(这并不像最初看起来那么困难)。

    1. 使用自定义context_processor而不是像danhip建议 - 但只有使用RequestContext呈现的模板才能访问这些变量。