在Flask中一次渲染多个模板

Sid*_*aRT 13 templates render flask

我正在制作Flask应用程序.我有一个登录区,一个博客区.如果我想获得用户的登录,我将呈现登录模板.但这不会使博客模板必须显示在登录区域下方.:/

我会尽量让它更清楚:

{% block login %} {% endblock %}
blah blah
{% block blog_display %} {% endblock %}
Run Code Online (Sandbox Code Playgroud)

现在我有一个login.html扩展它,并进入登录块.我有一个blogs.html进入blog_display.如何渲染两者?当我这样做render_template(),我可以把它叫做只的一个login.htmlblogs.html.

请帮帮我.如果你要求,我会提供更多细节.

Sea*_*ira 25

您可能会错误地考虑布局.您的布局是模板中通用的,而不是最复杂的模板.如果您需要很少的自包含功能,那么就可以按原样编写它们并将include它们放在需要它们的位置.

也就是说,如果你想要这样的东西:

----------------------------------
                  +--------------+
  Header          |   Login      |
                  +--------------+
----------------------------------

  Body Content (Blog)
Run Code Online (Sandbox Code Playgroud)

而且您还希望拥有一个这样的独立登录页面:

----------------------------------

  Header

----------------------------------

  +--------------+
  |   Login      |
  +--------------+
Run Code Online (Sandbox Code Playgroud)

然后创建一个登录部分,include并在您需要的地方.

模板/分音/的login.html

<form action="/login" method="post">
<!-- Your login goes here -->
</form>
Run Code Online (Sandbox Code Playgroud)

模板/ 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>
Run Code Online (Sandbox Code Playgroud)

模板/ login.html的

{% extends "your_base.html" -%}
{% block content -%}
{% include "partials/login.html" %}
{%- endblock content %}
Run Code Online (Sandbox Code Playgroud)

模板/ 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 %}
Run Code Online (Sandbox Code Playgroud)


Eug*_*Sue 6

Sean的答案很好,但是如果你不想扩展块,你可以选择一个更简单的解决方案,我更喜欢.

{% include "partials/login.html" %}
Run Code Online (Sandbox Code Playgroud)

只需在任何需要包含模板的地方使用它

  • 如果我们想向此模板传递一些参数,例如指示用户是否登录以相应调整视图的变量,该怎么办? (2认同)