Вопрос по render, templates, flask – Рендеринг нескольких шаблонов одновременно в Flask

11

Я делаю заявку на колбу. У меня есть логин, блог. Если я хочу получить логин пользователя, я предоставлю шаблон логина. Но это не отображает шаблон блога, который должен отображаться под областью входа. : /

Я постараюсь прояснить ситуацию:

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

Теперь у меня естьlogin.html который расширяет это и входит в блок входа в систему. у меня естьblogs.html который входит вblog_display, Как я могу сделать оба? Когда я делаюrender_template()Я могу назвать это только на одном изlogin.html или жеblogs.html.

Пожалуйста, помогите мне. Я дам более подробную информацию, если вы попросите об этом.

Еще лучше, если в вашем основном шаблоне есть два блока, и вы хотите получить их из двух разных дочерних шаблонов, что вы делаете? И как вы решаете кризис, если нет способа сделать это? SiddharthaRT

Ваш Ответ

2   ответа
23

Вы можете думать о макетах неправильно. Ваш макетmost общие из ваших шаблонов, а не ваш самый сложный. Если вам нужны небольшие функциональные возможности, напишите ихjust as they are а такжеinclude их там, где они нужны.

То есть, если вы хотите что-то вроде этого:

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

  Body Content (Blog)

И вы также хотите иметь отдельную страницу входа в систему, как это:

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

  Header

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

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

Затем создайте частичное имя входа иinclude это где вам это нужно.

Example

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>

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 раздел - мы только переопределяемheader вblog но я хотел показать, что вы можете иметь разделы, которые выdon't переопределить, а также те, которые вы сделали.
Сначала вы говорите «головка блока» затем «заголовок блока». Это опечатка?
5

Ответ Шона работает хорошо, но если вы не хотите расширять блоки, вы можете выбрать более простое решение, которое я предпочитаю больше.

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

Просто используйте его везде, где вам нужно включить шаблон

Похожие вопросы