在模板中访问字典并管理其变量

时间:2018-10-22 14:22:46

标签: python dictionary bottle

我需要创建一个具有int值(例如1-3)的下拉框组,它们已保存并在mongodb中正确读取。第一次会话后,我想将其存储的值放在下拉菜单中

服务器上的函数。py:

@get('/my_url')
def form():
   #get the last entry in database, the most updated one
   for my_document in db.mydb.find():
    pass

   return template('asset_form',**my_document)

asset_form.tpl(的一部分):

<h1>My site</h1>     
<hr>
<h3>Asset:   <input name="name1" type="text" value="Mail Server" input disabled /> </h3>

           {{dic_field1}}
           {{dic_field2}}
           {{my_document}}

            <table style="width:100%">
            <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>  
            <th>Col4</tj>
            </tr>
            <td>
                  <form method="POST" action="/the_post_url">
            <br/>
            Number of day(s):<select name = dic_field1>
              %if{{dic_field1}} == 1:
                <option value="1" selected >1</option>
              %else: 
                <option value="1">1</option>
              %end
              %if {{dic_field1}} == 2:
                <option value="2" selected >2</option>
              %else: 
                <option value="2">2</option>
              %end
              %if {{dic_field1}} == 3:
                 <option value="3" selected>3</option>
              %else: 
                 <option value="3">3</option>
              %end

我可以在python服务器中获取值(正确打印)。 my_document词典具有以下字段:dic_field1和dic_field2,

在模板中,变量“ {{my_document}}”输出错误:

  

NameError(“未定义名称'my_document'”,)

其中dic_field1和dic_field2正确输出。

仅具有变量是不够的,因为在“ if”中使用它们时,输出如下:

  

TypeError(“ unhashable type:'set'”,)

1 个答案:

答案 0 :(得分:2)

您似乎不太了解变量在瓶子中的工作方式。运行原始python代码时,不需要大括号。仅在将数据值注入html时才需要它们。

也只需将结果发送到模板,然后在模板内部进行处理。这样,您就不必弄乱源代码,而只需关注模板。

@get('/my_url')
def form():
   #get the last entry in database, the most updated one
   my_document = db.mydb.find()
   return template('asset_form', mydocument = my_document)

资产

%dic_field1 = mydocument['dic_field1']
%dic_field1 = mydocument['dic_field2']
%dic_field1 = mydocument['dic_field3']
<h1>My site</h1>     
<hr>
<h3>Asset:   <input name="name1" type="text" value="Mail Server" input disabled /> </h3>

           {{dic_field1}}
           {{dic_field2}}
           {{dic_field3}}

            <table style="width:100%">
            <tr>
            <th>Col1</th>
            <th>Col2</th>
            <th>Col3</th>  
            <th>Col4</tj>
            </tr>
            <td>
                  <form method="POST" action="/the_post_url">
            <br/>
            Number of day(s):<select name = {{dic_field1}}>
              %if dic_field1 == 1:
                <option value="1" selected >1</option>
              %else: 
                <option value="1">1</option>
              %end
              %if dic_field1 == 2:
                <option value="2" selected >2</option>
              %else: 
                <option value="2">2</option>
              %end
              %if dic_field1 == 3:
                 <option value="3" selected>3</option>
              %else: 
                 <option value="3">3</option>
              %end