在我的Django网络应用程序中,我想让用户通过不同的参数对模型对象进行排序,这是通过URL参数实现的,这些参数告诉视图应该加载哪些项目。这是模板中的Jinja / HTML片段:
<p><b><span class="text-info">sort by:</span></b>
<a href="{% url 'artists' %}">latest_release</a> |
<a href="{% url 'artists'%}?sorted_by=name">alphabetically</a> |
<a href="{% url 'artists'%}?sorted_by=next_release">soonest release</a></p>
如果用户已经按latest_release
排序(第一个链接),我希望删除它的链接。但是,我似乎无法找到以干燥的方式做到这一点的方法。
答案 0 :(得分:3)
您可以使用参数名称 - 显示名称映射:
在视图中定义dictmapping = {'': 'latest_release', 'name': 'alphabetically', 'next_release': 'soonest release'}
并将其传递给上下文:
context['mapping'] = mapping
现在在模板中迭代dict中的每一对并仅在sorted_by
值不等于key时显示链接:
{% for k, v in mapping.items %}
{% if request.GET.sorted_by|default:"" != k %} <a href="{% url 'artists' %}?sorted_by={{ k }}">{{ v }}</a> |{% endif %}
{% endfor %}
要在上次链接后删除|
分隔符,您可以验证forloop.last
状态。