Pytanie w sprawie render, templates, flask – Renderuj wiele szablonów jednocześnie w kolbie

11

Robię aplikację Flask. Mam obszar logowania, obszar blogów. Jeśli chcę uzyskać login użytkownika, renderuję szablon logowania. Nie oznacza to jednak, że szablon bloga musi być wyświetlany poniżej obszaru logowania. : /

Spróbuję to wyjaśnić:

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

Teraz mamlogin.html co rozszerza to i przechodzi do bloku logowania. mamblogs.html co się dziejeblog_display. Jak renderować oba? Kiedy robięrender_template(), mogę to nazwać tylko jednym zlogin.html lubblogs.html.

Proszę pomóż mi. Podam więcej szczegółów, jeśli o to poprosisz.

Co więcej, jeśli w szablonie głównym znajdują się dwa bloki i chcesz je uzyskać z dwóch różnych szablonów potomnych, co robisz? A jak rozwiązać kryzys, jeśli nie ma sposobu, aby to zrobić? SiddharthaRT

Twoja odpowiedź

2   odpowiedź
5

ale jeśli nie chcesz rozszerzać bloków, możesz wybrać prostsze rozwiązanie, które wolę bardziej.

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

Po prostu użyj go w dowolnym miejscu, w którym chcesz umieścić szablon

23

większość ogólny szablon, a nie twój najbardziej złożony. Jeśli potrzebujesz małych samodzielnych elementów funkcjonalnych, zapisz jetak jak są iinclude tam, gdzie są potrzebne.

To znaczy, jeśli chcesz czegoś takiego:

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

  Body Content (Blog)

A także chcesz mieć autonomiczną stronę logowania taką jak ta:

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

  Header

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

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

Następnie utwórz częściowy login iinclude to tam, gdzie go potrzebujesz.

Przykład

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 ma zarówno ahead i aheader sekcja - nadpisujemy tylkoheader wblog ale chciałem pokazać, że możesz mieć sekcjenie przesłonić tak samo jak te, które zrobiłeś. Sean Vieira
Najpierw powiesz „head block”, a następnie „head header”. Czy to literówka? swdev

Powiązane pytania