【问题标题】:Syntax to supply a parameter to a custom template tag in {% if %} block向 {% if %} 块中的自定义模板标签提供参数的语法
【发布时间】:2014-10-28 00:10:25
【问题描述】:

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

templatetags/polls_extras.py

def settings_value(name)

我可以像这样在我的模板中使用它:

templates/index.html

{% settings_value "ALLOWED_BOOL" %}

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

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

我试过了,但我得到了错误:TemplateSyntaxError at / Unused '"ALLOWED_BOOL"' at end of if expression。

templates/index.html

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

【问题讨论】:

  • 类似stackoverflow.com/questions/11372177/… 但我想在里面加个参数!
  • 您确定不能将此值从视图发送到模板吗?在模板中设置一个新变量以在其中使用似乎并不常见。
  • 不...每个页面都需要它。已经在stackoverflow.com/a/7716141/1369798 中进行了帐户讨论,这是最好的解决方案......只是想知道如何去做!
  • 我认为对您来说更好的方法是自定义上下文处理器。自定义上下文处理器可以自动向所有模板“注入”新数据。

标签: django django-templates


【解决方案1】:

您不能将模板标签用作另一个模板标签的参数。您在这里的选择是

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

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

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

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

【讨论】:

  • 谢谢布鲁诺。我采用了您的第一个选项并创建了一个新的 assignment_tag - 效果很好。
猜你喜欢
  • 2011-12-09
  • 2015-01-15
  • 2014-07-14
  • 2011-01-02
  • 2018-02-04
  • 1970-01-01
  • 2015-01-20
  • 2011-06-01
  • 1970-01-01
相关资源
最近更新 更多