在if比较字符串中呈现模板对象

时间:2017-08-24 06:22:08

标签: django django-templates django-template-filters

我一直在尝试这样做并且没有结果

<ul>
    {% for topic in topics %}
        <li {% if request.get_full_path == "/topic/{{ topic.topic_slug }}/" %}class="is-active"{% endif %}>
            <a href="{% url "TopicView" topic.topic_slug %}">{{ topic.topic_name }}</a>
        </li>
    {% endfor %}
</ul>

错误,我猜是来自在字符串中呈现的{{topic.topic_slug}}。我希望它在渲染过程中是“/ topic / tech /”,但似乎没有用。

1 个答案:

答案 0 :(得分:0)

我不相信您可以在{{ }}内使用{% %},因此您需要以不同的方式执行此操作。有很多种可能性。

尝试使用

 {% if request.get_full_path == "/topic/"+topic.topic_slug+"/" %}

但我这样做的方法就是简单地使用你的类来完成返回路径的工作。 /topic/tech/看起来像人们通常从get_absolute_url类函数返回的内容:

 class Topic:

     ...

     def get_absolute_url(self):
         return '/topic/{}/'.format(self.topic_slug)

然后在您的模板中,只需使用:

 {% if request.get_full_path == topic.get_absolute_url %}

(注意,如果你已经有一个absolute_url,只需使用另一个函数名。例如get_my_topic_slug_url())

希望有所帮助。