访问模板内的字典并管理其变量

Accessing dictionary inside template and managing its variables

我需要创建一组具有 int 值(例如:1-3)的下拉框,它们在 mongodb 中保存和读取。在第一个 session 之后,我想将它们的存储值放在下拉列表中

server.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("name 'my_document' is not defined",)

其中 dic_field1 和 dic_field2 输出正常。

只有变量是不够的,因为在 "if" 中使用它们时,输出如下:

TypeError("unhashable type: 'set'",)

看来您并不真正了解变量在 bottle 中的工作原理。当 运行 raw 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