Как отобразить макрос Jinja2 из вызываемого представления?

У меня есть определенные макросы, которые вызываются из нескольких шаблонов.

Например, на странице «Продукт» есть раздел «Обзор», в котором используются макросы, определенные в 'helpers/review.jinja2', для печати каждого обзора. В файле 'helpers/review.jinja2' есть два макроса:

{% macro render_review(request,review) -%}
{% macro render_review_comment(request,comment) -%}

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

Прямо сейчас у меня есть промежуточный шаблон 'review/review.jinja2', который выглядит так:

{% import 'helpers/review.jinja2' as review_helper %}
{{ review_helper.render_review(request,review) }}

Этот шаблон визуализируется из представления:

@view_config(route_name='review.add_review', renderer='review/review.jinja2')
def add_review(request):
    return dict(review=my_new_review)

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

Спасибо


person Marco Bruggmann    schedule 09.08.2012    source источник
comment
Я только что быстро просмотрел документы Jinja2, и не похоже, что это можно сделать.   -  person Jeff Tratner    schedule 11.08.2012


Ответы (2)



Этот метод был предложен в другом месте, он помог мне:

@app.route("/test")
def test_view():
    t = app.jinja_env.get_template('macros.html')
    mod = t.make_module({'request': request})
    return mod.my_macro()

Визуализировать макрос Jinja2, не беспокоясь о том, что находится в остальной части шаблона

person Community    schedule 31.05.2015