2013-02-08 81 views
2

如何在jinja2中“包含标签”。我需要在基本模板中输出一组文章。他们在儿童工作。Flask和jinja2包含标签

views.py

Articles.query.filter_by(name=name).first() 

base.html文件

{% block content %} 
    Content base 
{% endblock %} 
---{{ this_articles_tag }}---- 

children.html

{% extends 'base.html' %} 
{% block content %} 
    Content children 
{% endblock %} 
---{{ output Articles }}---- 

的Django在这个“包括标签“,如何在jinja2中做到这一点? (不使用context_processor)

回答

1

如果需要在模板中包含其他模板,只需在Jinja中使用include即可。但是如果你正在谈论模板标签(在Django中我记得我很喜欢它们),那么在Flask中只有你提到的context_processor才是可行的。我认为这根本不是一件坏事。

编辑:让一个函数指出在documentation注册背景处理器

最简单的方法。

但是,如果你想要的东西更花哨,像动态加载,否则你会从不同的地方加载functrion,那么你可以定义自己的装饰功能,基本上包返回字典的功能:

def example_templatetag(): 
    def get_something(): 
    return get_want_you_want_from_db() 
    return dict(get_something=get_something) 

然后在其中创建您的水壶的应用对象,你可以很容易地注册该功能:

app.context_processor(example_templatetag) 

然后你可以使用模板是这样的:

{% set data_you_wanted=get_something() %} 
{{ data_you_wanted }} 

但是,也许你在文档中提到的方法将是绰绰有余;)

+0

Context_protsessor可以注册为一个函数,并调用它的模板吗?我不会在所有页面上使用。 – Silent 2013-02-08 13:23:06

+0

在我的回答中添加了两种方法来获取Jinja模板中的功能。所以这个函数被注册为一个上下文处理器。然后它真的变得像Django中的templatetag :) – 2013-02-08 13:55:48

+1

谢谢。作为另一种解决方案可以使用基于类的视图。在基类中定义上下文。 – Silent 2013-02-08 16:14:14