在我的django项目中,我有两个选项使用查询字符串来定义要获取的一种列表,例如:
<a href="{% url 'index' %}?list=shopping">Shopping</a>
<a href="{% url 'index' %}?list=chores">Chores</a>
最重要的是,我还想检查用户选择了哪个列表,并使其在UI中显示为粗体。所以
{% if 'shopping' in request.GET.list or not request.GET.list %}
<b><a href="{% url 'index' %}?list=shopping">Shopping</a></b>
<a href="{% url 'index' %}?list=chores">Chores</a>
{% elif 'chores' in request.GET.list %}
<a href="{% url 'index' %}?list=shopping">Shopping</a>
<b><a href="{% url 'index' %}?list=chores">Chores</a></b>
{% endif %}
除了Shopping
和Chores
之外,现在真正让我感到困惑的是,我还希望有两个子选项来定义列表的顺序。例如New
和Old
。在我看来,唯一的方法就是重复所有代码。
{% if 'new' in request.GET.list %}
{% if 'shopping' in request.GET.list or not request.GET.list %}
<b><a href="{% url 'index' %}?list=shopping&order=new">Shopping</a></b>
<a href="{% url 'index' %}?list=chores&order=new">Chores</a>
<b><a href="{% url 'index' %}?list=shopping&order=new">New</a></b>
<a href="{% url 'index' %}?list=shopping&order=old">Old</a>
{% elif 'chores' in request.GET.list %}
<a href="{% url 'index' %}?list=shopping&order=new">Shopping</a>
<b><a href="{% url 'index' %}?list=chores&order=new">Chores</a></b>
<b><a href="{% url 'index' %}?list=chores&order=new">New</a></b>
<a href="{% url 'index' %}?list=chores&order=old">Old</a>
{% endif %}
{% elif 'old' in request.GET.list %}
{# ... #}
{% endif %}
我想您已经知道这变得多么疯狂,并且对于Old
if语句仍然需要做同样的事情。我真的不知道该怎么做,因为我看不到任何其他方式(1)知道应该是粗体而不是粗体。并且(2)知道每个选项应该以{{1}}还是?
开头。
答案 0 :(得分:1)
关于第一个具有粗体选择值的问题,例如,通过使用HTML类,您可以执行以下操作。
在您的css文件(或html文件中的样式块)中:
.selected {font-weight: bold;}
所以您的html现在可以变成类似的东西了,
<a class="{% if 'shopping' in request.GET.list or not request.GET.list %} selected{% endif %}" href="{% url 'index' %}?list=shopping">Shopping</a>
<a class="{% if 'chores' in request.GET.list %}selected{% endif %}" href="{% url 'index' %}?list=chores">Chores</a>
这样,您不必为每种情况编写两次或更多的html。
对于第二个问题,如果您在网址或html中使用“新”和“旧”,则可以执行以下操作,
{% with 'new old bla' as list %}
{% for option in list.split %}
<a class="{% if 'shopping' in request.GET.list or not request.GET.list %} selected{% endif %}" href="{% url 'index' %}?list=shopping&option={{ option }}">Shopping</a>
<a class="{% if 'chores' in request.GET.list %}selected{% endif %}" href="{% url 'index' %}?list=chores&option={{ option }}">Chores</a>
{% endfor %}
{% endwith %}
那只是您如何使用它的一个示例,但这将节省大量代码编写。
希望这会有所帮助!
答案 1 :(得分:1)
您可以使用QueryDict
作为查询字符串。这就是Django内部使用的方式。
https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.QueryDict
但实际上,我会考虑重构您的代码。将路由逻辑放在urls.py中,将业务逻辑放在视图函数中。尝试使模板文件尽可能简单。
例如,您可以使用常规网址/?list=shopping
代替/list/shopping/
。