Jinja2 şablonuna nasıl HTML dosyası ekleyebilirim?


85

Sunucum için Jinja şablonlarını kullanan Flask mikro çerçevesini kullanıyorum.

Bir ebeveynim template.htmlve adında bazı çocuk şablonları var child1.htmlve child2.htmlbu çocuk şablonlarından bazıları oldukça büyük HTML dosyaları ve işimde daha iyi anlaşılırlık için onları bir şekilde bölmek istiyorum.

Senaryomun içeriği 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()

Basitleştirilmiş template.html:

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

Sihir child1.html:

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

Yorumlar yerine:

<!-- include content1.html -->

Çok fazla html metnim var ve değişiklikleri takip etmek ve bazı hatalar yapmamak çok zor, bu yüzden bulması ve düzeltmesi oldukça zor.

content1.htmlHepsini yazmak yerine sadece yüklemek istiyorum child1.html.

Ben rastladım bu soruya , ancak bunu gerçekleştirme konusunda sorunlar vardı.

Jinja2'nin bunun için daha iyi bir aracı olabileceğini düşünüyorum.

NOT: Yukarıdaki kod düzgün çalışmıyor olabilir, sadece sorunu açıklamak için yazdım.

Yanıtlar:


184

Jinja2 {% include %}direktifini kullanın .

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

Bu, doğru içerik dosyasındaki içeriği içerecektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.