Flask: вернуть render_template из внешнего def вместо определения @ app.route - PullRequest
0 голосов
/ 28 марта 2019

+ ПРИМЕЧАНИЕ. Это мой самый первый вопрос по StackOverflow, отзывы более чем приветствуются.

Я работаю на веб-сайте с большим количеством страниц и хочу показать некоторые результаты запроса с шаблоном, когда пользователи используют панель поиска, но если пользователи переходят на мою страницу с панелью навигации, я хочу отобразить другой шаблон .

   @app.route("/python", methods=['GET', 'POST'])
   def python():
       language = 'python'
       search(language)
       return render_template("python/python.html")

   def search (language):
        if request.method == 'POST':
            query = request.form['search_input']
            print(query)
            return render_template('results_render.html',
            language = language, results = query)

После небольшого тестирования я суммировал поведение:
- 1. Я не знаю, будет ли возвращен / обработан мой файл results_render.html.
- 2. Я знаю, что моя страница python / python.html отображается, но я не знаю
переопределяет мой рендеринг результатов results_render.html.

Мое ожидаемое поведение будет:
- 1. Если пользователь заходит на myhost / python, return render_template("python/python.html") должен работать.
- 2. Если пользователь ищет что-то в myhost / python, def search(languages): должен return render_template('results_render.html', language = language, results = query) при переопределении
return render_template("python/python.html")

ДОПОЛНИТЕЛЬНО: при необходимости перенаправить пользователя на myhost / language / results (с языком var) будет в порядке.

1 Ответ

1 голос
/ 28 марта 2019

Вам необходимо вернуть значение, возвращаемое search. Вы можете использовать request.method, чтобы решить, нужно ли это, поэтому оно становится:

@app.route("/python", methods=['GET', 'POST'])
def python():
    language = 'python'
    if request.method == 'POST':
        return search(language)

    return render_template("python/python.html")

Согласно вашему примеру, или даже лучше:

@app.route("/python", methods=['GET', 'POST'])
def python():
    language = 'python'
    if request.method == 'POST':
        query = request.form['search_input']
        results = search(language, query)
        return render_template(
            'results_render.html',
            language = language,
            results = results
        )

    return render_template("python/python.html")

def search(language, query):
    results = do_something_to_get_results(language, query)
    return results
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...