2014-04-04 12 views
40

Ich verwende Flask Microframework für meinen Server, der Jinja Vorlagen verwendet. Ich habe Eltern template.html und einige childs child1.html, child2.html. Einige dieser Kinder sind ziemlich große HTML-Dateien und ich möchte sie irgendwie für bessere Klarheit über meine Arbeit aufteilen.Include HTML-Datei in Jinja2 Vorlage

die main.py:

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> 

Und die Magie in child1.html ist:

{% 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 eine Menge HTML-Text. Und es ist sehr schwer, Veränderungen im Auge zu behalten und keine Fehler zu machen, die dann schwer zu finden und zu korrigieren sind. Also möchte ich nur die content1.html laden, anstatt alles in child1.html zu schreiben. Ich bin auf diese Frage Include another HTML file in a HTML file gestoßen, aber ich hatte Probleme, es zu implementieren. Ich denke, Jinja2 könnte dafür ein besseres Werkzeug haben.

Hinweis. Der obige Code funktioniert möglicherweise nicht richtig, ich habe ihn einfach geschrieben, um das Problem zu veranschaulichen.

Antwort

94

Verwenden Sie die Anweisung jinja2 {% include %}.

{% 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.

+2

Vielen Dank. Ich werde diese Frage als die eine markieren, die ich akzeptiere, weil es das Beispiel zeigt, wie man es benutzt (obwohl es in diesem Fall ziemlich einfach ist.) – quapka

Verwandte Themen