从Python函数返回数据以与Jinja2模板(Flask)一起使用

时间:2015-03-06 20:40:34

标签: python flask jinja2

我正在尽我所能学习Python,我觉得我很好,但我被困在这里。

我从OMDB API中提取数据。我希望返回的数据填充我正在使用Flask制作的网站的模板。

到目前为止,我正在使用此代码从API获取数据:

import requests


class Movie(object):
    def __init__(self, **kwargs):
        for key, val in kwargs.items():
            setattr(self, key.lower(), val)


def search():
    base_url = 'http://www.omdbapi.com/?'
    title_search = 't={}'.format(raw_input('Search for a movie title. '))
    url = '{}{}&y=&plot=&short&r=json&tomatoes=true'.format(
           base_url, title_search)
    omdb_url = requests.get(url)
    movie_data = omdb_url.json()

    movie = Movie(**movie_data)

    print movie.title
    print movie.plot
    print movie.director
    print movie.rated
    print movie.imdbrating
    print movie.tomatofresh

search()

我遇到的问题是如何将我正在打印的值(movie.title,movie.plot等)放入我的烧瓶模板中。到目前为止,我有这个:

from flask import Flask, render_template

app = Flask(__name__)


@app.route('/')
def index():
    context = {'title': movie.title, 'plot': movie.plot,
               'director': movie.director, 'rated': movie.rated,
               'imdbrating': movie.imdbrating,
               'tomatofresh': movie.tomatofresh}

    front_page = render_template('index.html', **context)
    return front_page

在我的模板中,我有像{{movie.title}}这样的东西,这些东西似乎不起作用。如果我只是将模板保留为html,则render_template('index.html')渲染就好了。但是,我无法弄清楚如何将API中的数据导入这些模板区域。对不起,如果这是愚蠢的。这是我在这里的第一个问题。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

render_template('index.html', **context)

这是重要的一句话。 **context控制您传递给模板的内容。它的键是可用变量的名称。要在模板中包含movie.title的值,请使用

{{ title }}

或者,您可以完全从context删除index并致电

render_template('index.html', movie=movie)

这将使您的模板可以访问名为movie的变量。然后,您可以使用

打印出标题
{{ movie.title }}