访问模板内的字典并管理其变量
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
我需要创建一组具有 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