从 Python 函数返回数据以用于 Jinja2 模板 (Flask)
Returning Data from Python Function for use with Jinja2 Template (Flask)
我正在尽最大努力学习 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 获取到那些模板区域中。对不起,如果这是愚蠢的。这是我在这里的第一个问题。预先感谢您的帮助。
render_template('index.html', **context)
这是重要的一行。 **context
控制传递给模板的内容。它的键是可用变量的名称。要在模板中包含 movie.title
的值,请使用
{{ title }}
或者,您可以从 index
中完全删除 context
,然后调用
render_template('index.html', movie=movie)
这将使您的模板可以访问名为 movie
的变量。然后您可以使用
打印出标题
{{ movie.title }}
我正在尽最大努力学习 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 获取到那些模板区域中。对不起,如果这是愚蠢的。这是我在这里的第一个问题。预先感谢您的帮助。
render_template('index.html', **context)
这是重要的一行。 **context
控制传递给模板的内容。它的键是可用变量的名称。要在模板中包含 movie.title
的值,请使用
{{ title }}
或者,您可以从 index
中完全删除 context
,然后调用
render_template('index.html', movie=movie)
这将使您的模板可以访问名为 movie
的变量。然后您可以使用
{{ movie.title }}