首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jinja2在newsletter.html中不起作用

Jinja2在newsletter.html中不起作用
EN

Stack Overflow用户
提问于 2017-11-07 21:00:53
回答 1查看 307关注 0票数 0

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

下面是一些相关的代码片段:

以列表的形式获取数据,并使用Jinja进行模板:

代码语言:javascript
复制
# 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) 

在发送电子邮件的脚本中(其他情况下都可以正常工作),我简单地执行以下操作:

代码语言:javascript
复制
from scifi_finder import find_movies_with_genre

模板:

代码语言:javascript
复制
<!--  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

代码语言:javascript
复制
[u'Thor: Ragnarok', u'Blade Runner 2049', u'War for the Planet of the Apes', u'Geostorm']
EN

回答 1

Stack Overflow用户

发布于 2017-11-07 23:23:24

在调用render()时,您没有正确传递变量,下面是您正在做的事情:

代码语言:javascript
复制
template.render(info=movie_list)

您正在传递变量info,但在模板中却引用了movie_list

代码语言:javascript
复制
{% for item in movie_list %}
  {{ item[0] }}
  {{ item[1] }}
{% endfor %}

这不会起作用,你需要引用你传递的变量,我个人更喜欢这样:

代码语言:javascript
复制
template.render(movie_list=movie_list)

模板中的...and ...

代码语言:javascript
复制
{% for item in movie_list %}
  {{ item[0] }}
  {{ item[1] }}
{% endfor %}

...as你已经拥有它了。你也可以用...

代码语言:javascript
复制
{% for item in info %}
  {{ item[0] }}
  {{ item[1] }}
{% endfor %}

...in你的模板,并保持你的函数调用的原样,但就我个人而言,当我几周后再次阅读第一个变体时,我发现它不那么令人困惑。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47158672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档