从模板调用路由

时间:2014-02-16 20:23:20

标签: python flask

我可以使用一条路线渲染我可以在另一个模板中使用的模板吗?

我想像

@app.route('/tags/')
def tags():
    return render_template('tags.html', tags=create_tags())

然后以某种方式从不同的模板调用路径。

<h2>Tags</h2>
{{ render('/tags/') }}

2 个答案:

答案 0 :(得分:0)

您可以在模板中加入tags.html模板。

{% include "tags.html" %}

您必须将tags传递给您的模板,但这是实现此目的的方法。

答案 1 :(得分:0)

路由不渲染模板,函数可以。所有路线都是指向功能的URL。因此,对我来说显而易见的解决方案是使用一个返回渲染标记模板的函数:

def render_tags_template():
    return render_template('tags.html', tags=create_tags())

然后我们想要将该函数与url“/ tags”

相关联
app.add_url_rule('/tags', endpoint='tags', view_func=render_tags_template)

我们还希望能够在我们的模板中访问此功能。通过URL通过另一个请求访问它很可能是ajax的工作。所以我们必须将render_tags_template放到模板上下文中。

render_template('some_random_template.html', render_tags_template=render_tags_template

然后在你的some_random_template.html:

{{render_tags_template()}}

如果您不想显式传递render_tags_template,可以将其添加为全局模板:

app.jinja_env.globals['render_tags_template'] = render_tags_template

并在所有模板中自由使用,无需明确传递。

根据实际尝试做的事情,仅包含tags.html可能是最好和最简单的解决方案。使用函数生成内容可以提供更多的控制和灵活性。