2013-09-25 5 views
3

view.jinjaКак использовать макросы в включаемый файл

{% extends "layout/defaultlayout.jinja" %} 
{% include('details.jinja') %} 

defaultlayout.jinja

{% import 'elements/macros.jinja' as html %} 

Но я не в состоянии использовать макрос HTML в details.jinja без его Повторное включение

+1

Не очень помню, если это относится к макросам, но попробовать 'включить ('') details.jinja с context' – Tigra

ответ

3

Из ваших примеров видно, что вы пытаетесь импортировать macros.jinja и используете , что в качестве макроса, называемого html. Это не работает.

Макросы определены в файле jinja с именами.

macros.jinja:

{% macro dostuff(x,y,z) %} 
    <a href="{{ x }}" title="{{y}}">{{z}}</a> 
{% endmacro %} 

и вы можете импортировать целые файлы с импортом тег:

{% import macros.jinja as macros %} 

так, то в текущем пространстве имен, вы будете иметь macros, что указывает на файл macros.jinja. Чтобы использовать макрос dostuff, вы должны позвонить macros.dostuff(...).

Вам нужно определить макрос html внутри macros.jinja, импортировать macros.jinja как macros, а затем называть его macros.html(...).

Это имеет смысл?

+1

UndefinedError: 'macros' не определено – Sparr

+0

Цитаты являются обязательными: 'import" macros.jinja "as macros' –

1

Ответ Даниила не помог вам. Я должен был импортировать следующим образом

{% from "post_entity.html" import show_post with context %} 

Здесь post_entity.html был файл, содержащий макрос с show_post методом
, а затем использовали следующий способ:

{{show_post(post)}} 

Здесь post является словарь отправлен в шаблон из колбуrender_template.
И файл macro file выглядел примерно так:
post_entity.html

{% macro show_post(post) %} 
    {{post.photo_url}} 
    {{ post.caption }} 
{% endmacro %} 
Смежные вопросы