在Django模板的以下代码中添加斜杠是否可以?

时间:2019-06-17 07:48:29

标签: python 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}}/'中正确包含斜杠?在{{模板标记中使用{%可以吗?我在这里做什么错了?

2 个答案:

答案 0 :(得分:3)

templatetags参数中确实不支持“变量替换”({{ somevar }})语法-如果您认为在模板渲染的上下文中,此语法等效于“ print”语句,则这是有意义的。

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

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

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

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

(假设templatetag的作者正确处理了标签参数-有关更多信息,我可以参考the documentation)。

现在在这里是您的问题,您当然可以使用自定义过滤器来连接不同的部分,但这实际上是一个非常糟糕的主意。 Django的网址处理基于以下想法:实际上,您应该从不在任何地方对网址进行硬编码-在urls.py文件中定义和名称网址,然后使用内置函数({{1)} /模板标签(django.core.urlresolvers.reverse())生成它们。

在这里,正确的解决方案是在{% url %}对象上定义一个get_absolute_url()方法,该方法返回该对象的正确url(实际上是它的路径部分),并在模板。

就我而言,我什至将第二个间接级别用作模板过滤器,因此1 /您的模型(或任何sub_cat知道它自己的网址)和2 /模板过滤器可以判断给定的sub_cat是否对当前sub_cat是“活动的”,因此,如果要更改sub_cat何时“活动”的规范,则只能更改模板过滤器功能,而不是必须浏览所有模板(可能在途中丢失了某些东西)。

答案 1 :(得分:0)

与条款一起使用

{% with "/"|add:sub_cat.sub_cat_parent.cat_slug|add:"/"|add:sub_cat.sub_cat_slug|add:"/" as url_path %}

    {% if request.path == url_path %} 
      <div class="alert-secondary">Active</div>
    {% else %}

{% endwith %}

这将起作用