2013-09-25 85 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(...)

您需要在macros.jinja中定義一個名爲html的宏,導入macros.jinja爲macros,然後用macros.html(...)調用它。

這有道理嗎?

+1

UndefinedError:'宏'未定義 – Sparr

+0

行情是必須的:'導入「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 %} 
相關問題