Frage an flask, render, templates – Rendern Sie mehrere Vorlagen gleichzeitig in Flask

11

Ich mache eine Fläschchen-Bewerbung. Ich habe einen Login-Bereich, einen Blog-Bereich. Wenn ich die Benutzeranmeldung erhalten möchte, rendere ich die Anmeldevorlage. Die Blog-Vorlage, die unterhalb des Anmeldebereichs angezeigt werden muss, wird dadurch jedoch nicht gerendert. : /

Ich werde versuchen, es klarer zu machen:

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

Jetzt habe ich einelogin.html Das erweitert dieses und geht in den Login-Block. Ich habe einblogs.html was geht inblog_display. Wie kann ich beides rendern? Wenn ich es tuerender_template()Ich kann es nur auf einem derlogin.html oderblogs.html.

Bitte hilf mir. Ich gebe mehr Details, wenn Sie danach fragen.

Besser noch, wenn Ihre Master-Vorlage zwei Blöcke enthält und Sie diese aus zwei verschiedenen untergeordneten Vorlagen abrufen möchten, was tun Sie dann? Und wie lösen Sie die Krise, wenn dies nicht möglich ist? SiddharthaRT

Deine Antwort

2   die antwort
23

die meisten generische Ihrer Vorlagen, nicht Ihre komplexeste. Wenn Sie kleine, in sich geschlossene Funktionalitäten benötigen, schreiben Sie diese aufso wie sie sind undinclude sie, wo sie gebraucht werden.

Das heißt, wenn Sie so etwas wollen:

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

  Body Content (Blog)

Und Sie möchten auch eine eigenständige Anmeldeseite wie diese haben:

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

  Header

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

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

Dann erstelle ein Login partiell undinclude es, wo Sie es brauchen.

Beispiel

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 hat beides ahead und einheader Abschnitt - wir überschreiben nurheader imblog aber ich wollte zeigen, dass du Abschnitte haben könntestnicht überschreiben sowie diejenigen, die Sie getan haben. Sean Vieira
Sie sagen zuerst "Blockkopf", dann "Blockkopf". Ist das ein Tippfehler? swdev
5

aber wenn Sie keine Blöcke erweitern möchten, können Sie eine einfachere Lösung auswählen, die ich mehr bevorzuge.

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

Verwenden Sie es einfach überall dort, wo Sie die Vorlage einbinden möchten

Verwandte Fragen