2014-10-21 6 views
1

При использовании jinja2, базовый шаблон "Скелет" часто расширяется многими другими шаблонами.Как избежать дублирования процедуры настройки контекста при использовании базового шаблона?

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

Например, мне может потребоваться прочитать некоторые имена категорий из БД и отобразить их как список в заголовке, теперь мне нужно написать этот запрос везде, где я использую базовый шаблон.

Каков хороший способ избежать дублирования такого кода при использовании jinja2?

ответ

1

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

@app.context_processor 
def base_context(): 
    return { 
     'author': 'davidism', 
     'last_update': interesting_function() 
     'headers': db.query(MyModel.category).distinct().all() 
    } 

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

Контекст, переданный в функции render_template, переопределит эти значения контекста по умолчанию (если они имеют один и тот же ключ).

0

Один из способов, который я могу придумать, - использовать декоратор, который предоставляет дополнительные контекстные переменные для результата каждого представления.

Смежные вопросы