Wie füge ich eine HTML-Datei in eine Jinja2-Vorlage ein?


83

Ich verwende Flask Micro-Framework für meinen Server, der Jinja-Vorlagen verwendet.

Ich habe eine übergeordnete template.htmlund einige untergeordnete Vorlagen namens child1.htmlund child2.htmleinige dieser untergeordneten Vorlagen sind ziemlich große HTML-Dateien, und ich möchte sie irgendwie aufteilen, um die Übersichtlichkeit meiner Arbeit zu verbessern.

Inhalt meines main.pySkripts:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/')
@app.route('/<task>')
def home(task=''):
  return render_template('child1.html', task=task)

app.run()

Das vereinfachte template.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <div class="container">
      {% block content %}{% endblock %}
    </div>
  </body>
</html>

Die Magie ist in child1.html:

{% extends 'template.html' %}
{% block content %}
  {% if task == 'content1' %}
    <!-- include content1.html -->
  {% endif %}
  {% if task == 'content2' %}
    <!-- include content2.html -->
  {% endif %}
{% endblock %}

Anstelle der Kommentare:

<!-- include content1.html -->

Ich habe viel HTML-Text, und es ist sehr schwierig, Änderungen im Auge zu behalten und keine Fehler zu machen, die dann ziemlich schwer zu finden und zu korrigieren sind.

Ich möchte nur das laden, content1.htmlanstatt alles zu schreiben child1.html.

Ich bin auf diese Frage gestoßen , hatte aber Probleme, sie umzusetzen.

Ich denke, Jinja2 könnte ein besseres Werkzeug dafür haben.

HINWEIS: Der obige Code funktioniert möglicherweise nicht richtig. Ich habe ihn nur geschrieben, um das Problem zu veranschaulichen.

Antworten:


183

Verwenden Sie die jinja2- {% include %}Direktive.

{% extends 'template.html' %}
{% block content %}
    {% if task == 'content1' %}
        {% include 'content1.html' %}
    {% endif %}
    {% if task == 'content2' %}
        {% include 'content2.html' %}
    {% endif %}
{% endblock %}

Dies beinhaltet den Inhalt aus der richtigen Inhaltsdatei.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.