如何在模板中遍历网址

时间:2019-07-19 08:47:49

标签: django django-templates

我有很多要声明为常量的URL,因此可以在模板的forif语句中使用它们。目前,我手动执行此操作,例如:

{% url 'inbox' as inbox %}
{% url 'sent' as sent %}
{% url 'drafts_tasks' as drafts_tasks %}

但是,这感觉有点笨拙,当url数量增加时,每个模板上都会重复加载大量额外的代码。

有没有更好的方法可以遍历URL并声明它们?

以下是我如何使用它们的示例:

{% url 'XXX' as XXX %}
{% for ....

        <li class="nav-item {% if request.path == XXX %}active{% endif %}">
            <a class="nav-link" href="{{ XXX.url }}">{{ XXX.name }}
            </a>
        </li>

endfor %}

1 个答案:

答案 0 :(得分:0)

最简单的选择是将网址作为列表传递。

class URLView(TemplateView):
    template_name = 'urls.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['urls'] = get_my_list_of_urls()
        return context

对于重复的代码,您可以使用include模板标记。

使用重复的模板片段创建文件 templates / includes / url_link_list.html

<li class="nav-item {% if request.path == xxx %}active{% endif %}">
    <a class="nav-link" href="{{ xxx.url }}">{{ xxx.name }}</a>
</li>

然后在视图中定义的 urls.html 文件中,您将包括该片段:

<ul>
    {% for url in urls %}
        {% with url as xxx %}
            {% include 'includes/url_link_list.html' %}
        {% endwith %}
    {% endfor %}
</ul>