向 % if % 块中的自定义模板标签提供参数的语法

Posted

技术标签:

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

我已经设置了一个自定义模板标签(simple_tag)(使用https://***.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 %

【问题讨论】:

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

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

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

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

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

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

【讨论】:

谢谢布鲁诺。我采用了您的第一个选项并创建了一个新的 assignment_tag - 效果很好。

以上是关于向 % if % 块中的自定义模板标签提供参数的语法的主要内容,如果未能解决你的问题,请参考以下文章

在带有多个参数的自定义模板标签的模板中使用“if”

Django将多个参数传递给If语句中的自定义模板过滤器

% if % 块中的 Django 模板标签不显示

Django中的自定义过滤器

Django-Template:在标签块中获取变量!

13.Django中几大常用模板标签讲解及实战使用 for循环;if判断;页面跳转;开启关闭自动转义;url携带参数传递;注释