django - 如何遍历模板中的 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 %}
解决方案
最简单的选择是将 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>
推荐阅读
- django - python - 在批量python中创建资源时如何跳过现有对象实例
- ssl - Websocket 服务器的自签名证书的“公用名无效”
- ruby-on-rails - Rails hidden_field 不起作用!我使用carrierwave gem进行视频上传
- persistence - 理解 Lagoms 持久读端
- c# - 如何在 style->eventsetter 中处理我的自定义事件?
- java - Apache POI - 读取由 TEXT() 公式格式化的单元格
- ios - 如何在 IOS 中使用 MobileIron AppConnect SDK
- windows - 如何从注册表中使用批处理文件获取数据?
- python - Python pdf 下载。pdf下载后打不开
- gpflow - 保存和检索 Gpflow 模型的参数