检查是否在 Jinja2 模板中未选中复选框
Check if checkbox in NOT checked in a Jinja2 template
在我的 jinja2 模板中,我有一个复选框列表。最初他们都应该被检查。然后用户可以取消选中其中的一些以过滤掉东西。
<p><input name="name1" type="checkbox" checked /> blabla1 </p>
<p><input name="name2" type="checkbox" checked /> blabla2 </p>
<p><input name="name3" type="checkbox" checked /> blabla3 </p>
<p><input name="name4" type="checkbox" checked /> blabla4 </p>
<p><input name="name5" type="checkbox" checked /> blabla5 </p>
例如,如果未选中第一个复选框,我需要在参数列表中获取 name1
及其值(类似于 "off" 或 "false")( request.args.keys()
) 无论如何。
到目前为止,如果未选中第一个复选框,我只是在 args 列表中没有它:
/query=somequery&blabla2=on&blabla3=on&blabla4=on&blabla5=on
如何在 jinja2 模板中做这样的事情:
<p><input name="name1" type="checkbox" {% if checked %}
value="on"
{% else %}
value="off"
{% endif %} />
blabla1 </p>
并获取具有相应值的所有参数:
/query=somequery&blabla1=off&blabla2=on&blabla3=on&blabla4=on&blabla5=on
我的应用在 Flask/Werkzeug.
同时我设法自己解决了它。这是我的做法:
1. 给所有的复选框取一个相同的名字
2.Attributes 每个复选框的不同值:
`
<p><input name="type1" type="checkbox" checked value="val1"/> blabla1 </p>
<p><input name="type1" type="checkbox" checked value="val2"/> blabla2 </p>
<p><input name="type1" type="checkbox" checked value="val3"/> blabla3 </p>
<p><input name="type1" type="checkbox" checked value="val4"/> blabla4 </p>
<p><input name="type1" type="checkbox" checked value="val5"/> blabla5 </p>
在我的应用代码中:
将 arg 值列表与 "initial list" 与所有可能值的集合进行比较。如果缺少某些内容 - 将其添加到新列表以进行进一步处理。
ar = request.args
> #This will produce a structure of this kind
> ImmutableMultiDict([('query', u'q'), ('type1', u'val1'),
> ('type1', u'val2')])
> #Then I just get a list of values of 'type1' with the getlist function:
imd = ar.getlist('type1')
lst_init =['val1', 'val2', 'val3', 'val4', 'val5']
> #and compare the 2 list adding unchecked items to the newlist
newlist = []
for x in imd:
for y in lst_init:
if y not in imd:
if y not in newlist:
newlist.append(y)
在我的 jinja2 模板中,我有一个复选框列表。最初他们都应该被检查。然后用户可以取消选中其中的一些以过滤掉东西。
<p><input name="name1" type="checkbox" checked /> blabla1 </p>
<p><input name="name2" type="checkbox" checked /> blabla2 </p>
<p><input name="name3" type="checkbox" checked /> blabla3 </p>
<p><input name="name4" type="checkbox" checked /> blabla4 </p>
<p><input name="name5" type="checkbox" checked /> blabla5 </p>
例如,如果未选中第一个复选框,我需要在参数列表中获取 name1
及其值(类似于 "off" 或 "false")( request.args.keys()
) 无论如何。
到目前为止,如果未选中第一个复选框,我只是在 args 列表中没有它:
/query=somequery&blabla2=on&blabla3=on&blabla4=on&blabla5=on
如何在 jinja2 模板中做这样的事情:
<p><input name="name1" type="checkbox" {% if checked %}
value="on"
{% else %}
value="off"
{% endif %} />
blabla1 </p>
并获取具有相应值的所有参数:
/query=somequery&blabla1=off&blabla2=on&blabla3=on&blabla4=on&blabla5=on
我的应用在 Flask/Werkzeug.
同时我设法自己解决了它。这是我的做法:
1. 给所有的复选框取一个相同的名字
2.Attributes 每个复选框的不同值:
`
<p><input name="type1" type="checkbox" checked value="val1"/> blabla1 </p>
<p><input name="type1" type="checkbox" checked value="val2"/> blabla2 </p>
<p><input name="type1" type="checkbox" checked value="val3"/> blabla3 </p>
<p><input name="type1" type="checkbox" checked value="val4"/> blabla4 </p>
<p><input name="type1" type="checkbox" checked value="val5"/> blabla5 </p>
在我的应用代码中:
将 arg 值列表与 "initial list" 与所有可能值的集合进行比较。如果缺少某些内容 - 将其添加到新列表以进行进一步处理。
ar = request.args
> #This will produce a structure of this kind > ImmutableMultiDict([('query', u'q'), ('type1', u'val1'), > ('type1', u'val2')]) > #Then I just get a list of values of 'type1' with the getlist function: imd = ar.getlist('type1') lst_init =['val1', 'val2', 'val3', 'val4', 'val5'] > #and compare the 2 list adding unchecked items to the newlist newlist = [] for x in imd: for y in lst_init: if y not in imd: if y not in newlist: newlist.append(y)