禁用当前页面链接的最干扰方法是什么?

时间:2018-06-13 06:33:31

标签: django jinja2

在我的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排序(第一个链接),我希望删除它的链接。但是,我似乎无法找到以干燥的方式做到这一点的方法。

1 个答案:

答案 0 :(得分:3)

您可以使用参数名称 - 显示名称映射:

在视图中定义dict
mapping = {'': '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状态。