我正在创建一个HTML
和Bottle
(Python
)的网上商店。我知道如何在HTML
和Python
之间传递数据,以及如何在Python
中编写HTML
代码(参考:http://karrigell.sourceforge.net/en/pythoninsidehtml.html)。
我挣扎的是将Python
代码写入从HTML
传递到Python
的引用中。
我从数据库加载图像,因为我有很多。我设置并将变量image_name(index)
传递给HTML
,如下所示:
@get('/store')
def showStore():
images = models.images() # reads from database
data = ', number_of_images={}'.format(len(images))
for (id, title, path) in images:
data += ', image_name{}={}, '.format(id, path)
data += 'image_title{}={}'.format(id, title)
return template('store.html' + data)
store.html
的相关部分:
<!-- Portfolio Gallery Grid -->
<div class="row">
<% for i in range(1, number_of_images+1): %>
<div class="column">
<div class="content">
<img src="static/images/{{image_name<%i%>}}.jpg">
<h3> {{image_title<%i%>}} </h3>
</div>
</div>
<% end %>
</div>
由于Bottle
不是那么出名:{{image_title}}
中的HTML
获得了template (html, variables)
传入的值。块<% %>
使您可以在其中编写Python
代码。
当我没有在HTML
中使用图像属性的索引时,一切都正常工作,所以HTML
和for loop
确实有效,问题在于这部分:
{{image_title<%i%>}}
在我看来,<%i%>
应该创建一个变量image_title
i,但显然它没有。
我得到一个template not found
错误,可能是因为我传入的变量(来自.py
文件)在HTML
中不存在。
我非常希望动态地执行此操作而不是对每个图像进行硬编码的原因是我有很多这些图像,并且每个图像都有我在这里遗漏的相关数据的整个表格,因为我会以与图像相同的方式检索它名称和头衔。
我很感激任何帮助正确结合Python
内部的HTML
与传入的变量,因为我真的想动态地做它
这里有相当多的错误。
您找不到模板错误实际上与您在该模板中执行的奇怪操作无关。这是因为您在Python代码的最后一行调用data
时将模板名称与template()
字符串连接起来。我不知道瓶子,但我绝对肯定数据需要是该功能的第二个参数:
return template('store.html', data)
至于其余部分,绝对没有必要做你在那里做的任何事情。只需将图像作为列表传递,然后在模板中迭代该列表。动态变量总是一个坏主意,这对模板和标准Python代码同样适用。
(虽然请注意,您甚至不创建任何动态变量;您只需要一个字符串,格式化为看起来像一组变量赋值。但这并不能使它实际上在任何地方分配任何变量。)