Как не отображать / отображать переменную, возвращаемую в колбу? - PullRequest
0 голосов
/ 19 мая 2018

У меня есть строковая переменная из формы HTML, и я хочу использовать ее в качестве параметра для других функций.Тем не менее, flask отображает переменную, а не другие элементы.Рассматриваемая переменная в моем случае: sub

@server.route('/')
def main():  
    return render_template("main.html")          #HTML input form is here 

@server.route('/index', methods=['POST'])
def index_post(): 
    sub = request.form['search_sub']             #sub is user input    
    return sub                                   # Don't want render. Just normal return   

@server.route('/index') #This page should load after user enters on form
def index():
    return render_template("index.html")

@server.route('/index/result', methods=['POST']) # This is where sub will be needed
@cache_flask.cached(timeout=240) 
def result():
    sub = index_post()                          # declaring sub here?
    main_info = redditnlp.version125_flask(sub) # sub is a parameter here
    return render_template("result.html", main_info=main_info)

Если это поможет, вот мои HTML-файлы для main.html и index.html

main.html

<form action="/index", method = "POST">
    <input id ="input" class="form-control" type="text" placeholder="Insert subreddit" name="search_sub">
</form>


index.html

<form action="/index/result" method="POST">
    <button id="result_button" class="button"><span>See sentiment results</span></button>
</form>

1 Ответ

0 голосов
/ 19 мая 2018

Я предполагаю, что вы используете Flask-Caching или Flask-Cache.

Прежде всего, похоже, что вы пытаетесь кэшировать значениеполе формы search_sub для будущих запросов путем кэширования функции представления result().Однако вы кешируете неправильную функцию просмотра.Вам следует кэшировать index_post(), потому что это представление, которое выдает значение, которое вы хотите сохранить между запросами.

Во-вторых, это не сработает.Прямые вызовы кешированного представления обойдут кэш, поскольку имя ключа по умолчанию соответствует пути маршрута.Вы можете переопределить это, указав свой собственный ключ в аргументе key_prefix:

@server.route('/index', methods=['POST'])
@server.cache.cached(timeout=240, key_prefix='index_post')
def index_post():
    sub = request.form['search_sub']
    return sub

Это установит ключ кэша на index_post.Теперь вызов функции напрямую или в виде представления будет работать.


Это кажется очень запутанным способом решения этой проблемы.Возможно, вам стоит взглянуть на встроенную колбу sessions.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...