我有一个函数,它从一个API获取数据,然后使用Jinja2将这些数据插入到一个超文本标记语言文件中。我希望这些数据显示在我的newsletter.html中,并作为电子邮件发送。除了这种情况之外,一切都很好:

下面是一些相关的代码片段:
以列表的形式获取数据,并使用Jinja进行模板:
# movie_finder.py
movie_list = []
for item in now_playing['results']:
if genre_id in item['genre_ids']:
movie_list.append(item['original_title'])
print movie_list
# Create jinja2 environment
try:
env = Environment(loader=PackageLoader('movie_finder', 'templates'))
template = env.get_template('newsletter.html')
rend = template.render(info=movie_list)
print "Templating successful"
except:
print "Templating fail"
return "Templating fail"
find_movies_with_genre(API_KEY, 878) 在发送电子邮件的脚本中(其他情况下都可以正常工作),我简单地执行以下操作:
from scifi_finder import find_movies_with_genre模板:
<!-- Newsletter template by https://github.com/derekpunsalan/-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width"/>
<!-- For development, pass document through inliner -->
<link rel="stylesheet" href="css/simple.css">
<style type="text/css">
输出print movie_list
[u'Thor: Ragnarok', u'Blade Runner 2049', u'War for the Planet of the Apes', u'Geostorm']发布于 2017-11-07 23:23:24
在调用render()时,您没有正确传递变量,下面是您正在做的事情:
template.render(info=movie_list)您正在传递变量info,但在模板中却引用了movie_list
{% for item in movie_list %}
{{ item[0] }}
{{ item[1] }}
{% endfor %}这不会起作用,你需要引用你传递的变量,我个人更喜欢这样:
template.render(movie_list=movie_list)模板中的...and ...
{% for item in movie_list %}
{{ item[0] }}
{{ item[1] }}
{% endfor %}...as你已经拥有它了。你也可以用...
{% for item in info %}
{{ item[0] }}
{{ item[1] }}
{% endfor %}...in你的模板,并保持你的函数调用的原样,但就我个人而言,当我几周后再次阅读第一个变体时,我发现它不那么令人困惑。
https://stackoverflow.com/questions/47158672
复制相似问题