检查Jinja2模板中是否未选中复选框

时间:2015-01-29 14:10:53

标签: html templates jinja2

在我的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上。

1 个答案:

答案 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>
  1. 在我的应用代码中:
    将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)