在我的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
)中获取request.args.keys()
及其值(类似于“off”或“false”的smth)无论如何。
到目前为止,如果未选中第一个复选框,我只是在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上。
答案 0 :(得分:1)
与此同时,我设法自己解决了这个问题。我是这样做的:
1.给所有复选框命名相同的名称
2.为每个复选框分配不同的值:
`
<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值列表与“初始列表”与所有可能值的集合进行比较。如果缺少某些内容 - 将其添加到新列表中以进行进一步处理。
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)