首页 > 解决方案 > 可以在 Django 模板的下面代码中添加斜杠吗?

问题描述

我正在尝试解决一个问题。在这个过程中,我得到了这个问题。

{% if request.path == '/{{sub_cat.sub_cat_parent.cat_slug}}/{{sub_cat.sub_cat_slug}}/' %} 
            <div class="alert-secondary">Active</div>
{% else %}

如何在此处正确包含斜杠'/{{sub_cat.sub_cat_parent.cat_slug}}/{{sub_cat.sub_cat_slug}}/'?可以{{{%模板标签中使用吗?我在这里做错了什么?

标签: pythondjango

解决方案


在模板标签参数中确实不支持“变量替换”({{ somevar }})语法 - 如果您认为在模板呈现的上下文中,这种语法将等效于“打印”语句,这是有道理的。

这并不意味着您不能将上下文变量传递给模板标签 - 否则模板标签的用途将非常有限 - 但您只需提及它们即可这样做,即假设您有一个名为“路径”的上下文变量,您可以在这里使用它作为

{% if request.path==path %}
...

您也可以在此处使用过滤器表达式,即这也是有效的:

{% if request.path==path|lower %}

(假设模板标签的作者正确处理了标签参数 - 我让您参考文档以获取更多信息)。

现在在这里写/您的问题,您当然可以使用自定义过滤器来连接不同的部分,但这实际上是一个非常糟糕的主意。Django 的 url 处理基于这样的想法,即您实际上永远不应该在任何地方对 url 进行硬编码——您在文件中定义和命名url urls.py,然后使用内置函数 ( django.core.urlresolvers.reverse()) / templatetags ( {% url %}) 生成它们。

在这里,正确的解决方案是在您的对象上定义一个get_absolute_url()方法,该方法sub_cat返回该对象的正确 url(实际上是它的路径部分),并在模板中对其进行测试。

就我而言,我什至会使用第二个间接级别作为模板过滤器,因此 1/ 您的模型(或其他模型sub_cat)知道它自己的 url,并且 2/ 模板过滤器可以判断给定sub_cat是否“活跃” " 对于当前request.path,因此如果定义 sub_cat 何时“活动”的规范要更改,您将只需要更改模板过滤器功能,而不必浏览所有模板(可能会在途中遗漏一些东西)。


推荐阅读