我正在尝试解决问题。在此过程中,我遇到了这个问题。
{% 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}}/'
中正确包含斜杠?在{{
模板标记中使用{%
可以吗?我在这里做什么错了?
答案 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 %}
这将起作用