17

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

我会尽量让它更清楚:

{% block login %} {% endblock %}
blah blah
{% block blog_display %} {% endblock %}

现在我有一个login.html扩展它,并进入登录块。我有一个blogs.html进入blog_display. 如何渲染两者?当我这样做时render_template(),我只能在login.htmlor之一上调用它blogs.html

请帮帮我。如果您要求,我会提供更多详细信息。

4

2 回答 2

32

您可能以错误的方式考虑布局。您的布局是通用的模板,而不是最复杂的模板。如果您需要很少的独立功能,请按原样编写它们,并include在需要它们的地方编写它们。

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

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

  Body Content (Blog)

而且您还希望有一个独立的登录页面,如下所示:

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

  Header

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

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

然后include在需要的地方创建一个登录部分。

例子

模板/部分/login.html

<form action="/login" method="post">
<!-- Your login goes here -->
</form>

模板/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>

模板/login.html

{% extends "your_base.html" -%}
{% block content -%}
{% include "partials/login.html" %}
{%- endblock content %}

模板/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 %}
于 2012-06-08T16:48:00.520 回答
9

肖恩的回答很好,但如果你不想扩展块,你可以选择一个更简单的解决方案,我更喜欢这个。

{% include "partials/login.html" %}

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

于 2015-12-03T17:50:15.457 回答