首页 > 解决方案 > 如何遍历模板中的 url

问题描述

我有大量的 URL,我想声明为常量,这样我就可以在模板中的for和语句中使用它们。if目前我手动执行此操作,例如:

{% 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 %}

标签: djangodjango-templates

解决方案


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

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>

推荐阅读