在 Flask 中一次渲染多个模板
Posted
技术标签:
【中文标题】在 Flask 中一次渲染多个模板【英文标题】:Render multiple templates at once in Flask 【发布时间】:2012-06-12 09:24:22 【问题描述】:我正在制作一个 Flask 应用程序。我有一个登录区,一个博客区。如果我想获取用户的登录信息,我将渲染登录模板。但这不会呈现必须显示在登录区域下方的博客模板。 :/
我会尽量说清楚:
% block login % % endblock %
blah blah
% block blog_display % % endblock %
现在我有一个 login.html
扩展它,并进入登录块。我有一个blogs.html
,它进入blog_display
。如何渲染两者?当我执行render_template()
时,我只能在login.html
或blogs.html
之一上调用它。
请帮帮我。如果您要求,我会提供更多详细信息。
【问题讨论】:
更好的是,如果您的主模板中有两个块,并且您想从两个不同的子模板中获取它们,您会怎么做?如果没有办法,你如何解决危机? 【参考方案1】:Sean 的回答效果很好,但如果你不想扩展块,你可以选择一个更简单的解决方案,我更喜欢这个。
% include "partials/login.html" %
只需在需要包含模板的任何地方使用它
【讨论】:
如果我们想向这个模板传递一些参数,比如一个指示用户是否登录的变量以相应地调整视图。【参考方案2】:您可能以错误的方式考虑布局。您的布局是模板中最通用的,而不是最复杂的。如果您需要很少的自包含功能,那么按原样写下来,然后在需要的地方写上include
。
也就是说,如果你想要这样的东西:
----------------------------------
+--------------+
Header | Login |
+--------------+
----------------------------------
Body Content (Blog)
你还想拥有一个像这样的独立登录页面:
----------------------------------
Header
----------------------------------
+--------------+
| Login |
+--------------+
然后在你需要的地方创建一个登录部分并include
它。
示例
模板/partials/login.html
<form action="/login" method="post">
<!-- Your login goes here -->
</form>
templates/your_base.html
<!DOCTYPE html>
<html>
<head>
% block head %
#
Default HEAD content goes here
with extra nested blocks for children to override
if needed.
#
% endblock head %
</head>
<body>
<header>% block header %% endblock header %</header>
# Note: This assumes we *always* want a header #
% block content %% endblock content %
</body>
</html>
templates/login.html
% extends "your_base.html" -%
% block content -%
% include "partials/login.html" %
%- endblock content %
templates/blog.html
% extends "your_base.html" -%
% block header -%
super() # Render the default header contents here #
% include "partials/login.html" %
%- endblock header %
% block content -%
# Render your blog posts here #
%- endblock content %
【讨论】:
你先说“块头”,然后是“块头”。是不是打错字了?your_base
有一个 head
和一个 header
部分 - 我们只覆盖 blog
中的 header
但我想表明你可以有部分你 don' t 覆盖和你所做的一样。以上是关于在 Flask 中一次渲染多个模板的主要内容,如果未能解决你的问题,请参考以下文章