17

Flask アプリケーションを作成しています。ログインエリア、ブログエリアがあります。ユーザーのログインを取得したい場合は、ログイン テンプレートをレンダリングします。ただし、これは、ログイン領域の下に表示する必要があるブログ テンプレートをレンダリングしません。:/

私はそれをより明確にしようとします:

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

これlogin.htmlを拡張してログインブロックに入る があります。にblogs.html入る がありblog_displayます。両方をレンダリングするにはどうすればよいですか? すると、またはのいずれかrender_template()でのみ呼び出すことができます。login.htmlblogs.html

私を助けてください。頼めば詳しく教えてくれます。

4

2 に答える 2

32

レイアウトについて間違った方法で考えている可能性があります。レイアウトはテンプレートの中で最も一般的なものであり、最も複雑なものではありません。自己完結型の機能がほとんど必要ない場合includeそれらをそのまま、必要な場所に記述します。

つまり、次のようなものが必要な場合:

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

  Body Content (Blog)

また、次のようなスタンドアロンのログイン ページも必要です。

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

  Header

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

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

次に、ログイン パーシャルを作成し、include必要な場所に配置します。

templates/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>

テンプレート/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 に答える