Возврат данных из функции 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 }}
Другие вопросы по тегам