Django模板中如何让HTML下拉框默认选中URL参数指定的月份?
解决Django下拉框默认选中URL参数月份的问题
嘿,我一眼就看出问题所在啦!你的下拉框能正常显示1-12,但默认选中逻辑不生效,核心原因是数据类型不匹配:
request.GET.month从URL里拿到的是字符串类型(比如你的URL里的"7")- 而
months上下文里的i是整数类型(比如7)
整数和字符串直接用==比较是不相等的,所以你的if条件永远不会触发!
给你三种可行的解决方案,选你顺手的来:
方案1:在模板里把URL参数转成整数
用Django内置的add:0过滤器,它能把字符串格式的数字转换成整数,修改条件判断部分即可:
{% for i in months %} {% if i == request.GET.month|add:0 %} <option value="{{ i }}" selected="selected">{{ i }}</option> {% else %} <option value="{{ i }}">{{ i }}</option> {% endif %} {% endfor %}
方案2:在视图里把月份列表改成字符串类型
修改视图里生成months的代码,把整数转成字符串:
# 原来的代码:months = range(1,13) months = [str(i) for i in range(1,13)]
这样模板里的i和request.GET.month都是字符串类型,原来的条件判断就能正常生效了。
方案3:在模板里把整数转成字符串
用stringformat:"s"过滤器把整数i转成字符串,再和URL参数比较:
{% for i in months %} {% if i|stringformat:"s" == request.GET.month %} <option value="{{ i }}" selected="selected">{{ i }}</option> {% else %} <option value="{{ i }}">{{ i }}</option> {% endif %} {% endfor %}
随便选一种方法试试,应该就能让下拉框默认选中URL里指定的月份啦!
内容的提问来源于stack exchange,提问作者Linh Nguyen
相关产品推荐
相关产品推荐

