Возврат данных из функции Python для использования с шаблоном Jinja2 (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 в эти области шаблона. Извините, если это глупо. Это мой первый вопрос здесь. Спасибо заранее за любую помощь.
1 ответ
render_template('index.html', **context)
Это важная черта. **context
контролирует, что вы передаете в свой шаблон. Его ключи - это имена доступных переменных. Чтобы включить значение movie.title
в вашем шаблоне используйте
{{ title }}
Кроме того, вы можете удалить context
от index
целиком и позвони
render_template('index.html', movie=movie)
Это даст вашему шаблону доступ к переменной с именем movie
, Вы можете распечатать название, используя
{{ movie.title }}