2017-01-31 5 views
0

В настоящее время я использую Python Flask и Jinja2. У меня есть таблица с некоторым сообщением. Я хочу, чтобы в основном была кнопка в меню с количеством сообщений, которые пользователь имеет.Python Flask, Jinja Global

Я использовал это, чтобы боковая панель глобальной, поэтому он может появиться на нескольких страницах: app.jinja_env.globals.update (...)

Это код, который я использовал, чтобы получить количество сообщений: def message_notification(): c.execute("SELECT count(*) FROM messages WHERE read = 0 AND receiver = ?",(session['username'],)) msgnotifcation = c.fetchone() return msgnotifcation[0]

Однако я получаю эту ошибку: RuntimeError: Working outside of request context.

есть ли другой способ сделать это, как я понял, что проблема связана с сессии [ «имя пользователя»] бит ,

ответ

1

Вам нужно переместить этот код так, чтобы он выполнялся до того, как шаблон начнет рендерить, т. Е. Он будет находиться внутри контекста запроса.

Флакон предоставляет декодер context_processor для достижения этого. http://flask.pocoo.org/docs/0.12/templating/#context-processors Возвращенные значения будут доступны во всех ваших шаблонах, как если бы они были возвращены как любой другой элемент контекста из представления.

@app.context_processor 
def message_count(): 
    value = ...your sql... 
    return dict(message_count=value) 

Тогда в ваших взглядах вы можете использовать:

{{ message_count }} 
+0

работает. Большое спасибо :) –