【问题标题】:Check if checkbox in NOT checked in a Jinja2 template检查是否在 Jinja2 模板中未选中复选框
【发布时间】:2015-01-29 14:10:53
【问题描述】:

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

例如,如果未选中第一个复选框,则无论如何我都需要在参数列表 (request.args.keys()) 中获取 name1 及其值(类似“off”或“false”)。 到目前为止,如果未选中第一个复选框,我只是在 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 上。

【问题讨论】:

    标签: html templates jinja2


    【解决方案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)
      

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      相关资源
      最近更新 更多