我正在制作Flask应用程序。我有一个登录区,一个博客区。如果我想获得用户的登录,我将呈现登录模板。但是,这并不会呈现必须在登录区域下方显示的博客模板。 :/
我会尝试让它更清晰:
{% block login %} {% endblock %}
blah blah
{% block blog_display %} {% endblock %}
现在我有一个login.html
扩展了这个,然后进入登录块。我有blogs.html
进入blog_display
。如何渲染两者?当我执行render_template()
时,我只能在login.html
或blogs.html
中的一个上调用它。
请帮帮我。如果您要求,我会提供更多详细信息。
答案 0 :(得分:23)
您可能会错误地考虑布局。您的布局是模板的大多数通用,而不是最复杂的模板。如果您需要很少的自包含功能,那么就将它们写成就像它们和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 %}
答案 1 :(得分:5)
Sean的答案很有效,但如果你不想扩展阻止,你可以选择一个更简单的解决方案,我更喜欢这个。
{% include "partials/login.html" %}
只需在任何需要包含模板
的地方使用它