English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django 模板系统

 Django kann Python und HTML getrennt voneinander handhaben, Python-Code/Variablen gelangen in den View und das HTML-Template. Diese beiden werden durch die Render-Funktion und die Django-Template-Sprache verbunden.

Render-Funktion

Diese Funktion hat drei Parameter -

Anfrage - Initialisiere die AnfrageTemplate-Pfad - Dies ist der Pfad relativ zur Variable in der Datei settings.py des Projekts bis zum Optionenwert TEMPLATE_DIRS.Parameter-Diktum - Das Diktum enthält alle Variablen, die im Template benötigt werden. Diese Variablen können erstellt oder durch locals() verwendet werden, durch alle lokalen Variablen, die im View deklariert wurden.

Django-Template-Sprache (DTL)

Der Django-Template-Engine bietet eine kleine Sprache, um die Benutzeroberfläche der Anwendung zu definieren.

Variable anzeigen

Die Variable wird wie folgt angezeigt: {{variable}}. Der Template-Code wird durch die Variablen ersetzt, die vom View in der render-Funktion als dritter Parameter gesendet werden. Lassen Sie uns hello.html ändern, um das aktuelle Datum anzuzeigen:

hello.html

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
<html> 
    <body>
       Hello World!!!<p>今天是{{today}}</p>
    </body> 
 </html>

Dann ändert sich unsere Ansicht zu -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
def hello(request):
    today = datetime.datetime.now().date()
    return render(request, "hello.html", {"today": today})

Nun erhalten wir die folgende Ausgabe, wenn wir die URL aufrufen /myapp/hello nachher -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
Hallo Welt!!!
 Heute ist September. 11, 2015

Wie Sie vielleicht bemerkt haben, verwendet Django, wenn eine Variable kein String ist, die __str__-Methode, um sie anzuzeigen; und nach demselben Prinzip können Sie auf die Eigenschaften eines Objekts zugreifen, wie Sie es in Python tun. Zum Beispiel: Wenn wir das Jahr eines Datums anzeigen möchten, ist hier die Variable: {{today.year}}.

Filter

Sie können damit geänderte Variablen anzeigen. Die Struktur des Filters ist wie folgt: {{var|filters}}.

Ein einfaches Beispiel -

{{string|truncatewords:80}} - Der Filter schneidet Zeichenketten ab, daher sehen Sie nur80 Zeichen.}}

       {{string|lower}} − Konvertiert Zeichen in Kleinbuchstaben            {{string|escape|linebreaks}} − Entkoppelung des Stringinhalts, dann Umwandlung der Zeilenumbrüche in Symbole.    

Sie können auch Standardvariablen festlegen.

Symbole

Die Symbole können folgende Aktionen ausführen: if -Bedingung, for -Schleife, Template-Inheritance und mehr.

if-Tag

Wie in Python können Sie in den Templates if, else und elif verwenden -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
<html>
    <body>
       Hello World!!!<p>今天是{{today}}</p>
       我们在这里
       {% if today.day == 1 }%
       这个月的第一天。
       {% elif today == 30 %}
       这个月的最后一天。
       {% else %}
       我不知道。
       {% endif %}
    </body>
 </html>

In diesem neuen Template wird der Wert gemäß dem aktuellen Datum des Tages dargestellt.

for-Tag

Wie 'if', haben wir den 'for' -Tag, der genau so verwendet wird wie in Python. Lassen Sie uns die Liste der hello -Ansicht ändern, die an unser Template gesendet wird -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
def hello(request):
    today = datetime.datetime.now().date()
    daysOfWeek = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
    return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})

Dieses Template wird verwendet, um eine Liste anzuzeigen {{ for }} -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
<html>
    <body>
       Hello World!!!<p>今天是{{today}}</p>
       我们在这里
       {% if today.day == 1 }%
       这个月的第一天。
       {% elif today == 30 %}
       这个月的最后一天。
       {% else %}
       我不知道。
       {% endif %}
       <p>
          {% for day in days_of_week %}
          {{day}}
       </p>
 
       {% endfor %}
    </body>
 </html>

Wir sollten den folgenden Ausgabebefehl erhalten -

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
Hallo Welt!!!
 Heute ist September. 11, 2015
 Wir sind, ich weiß nicht.
 Montag
 Dienstag
 Mittwoch
 Donnerstag
 Freitag
 Samstag
 Sonntag

Blöcke und Erweiterungssymbole

Das Templatesystem ist eine unvollständige Template-Inheritance. Wenn Sie die Bedeutung des Templates gestalten, füllt das Untertemplate entsprechend seinen Bedürfnissen das Haupttemplate aus, ähnlich wie eine Auswahl eines Tabs auf einer Seite möglicherweise speziellen CSS benötigt.

Lassen Sie uns das Template hello.html ändern, um von main_template.html zu erben.

main_template.html

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
<html>
    <head> 
       <title>
          {% block title %}Seiten-Titel{% endblock %}
       </title> 
    </head>
 
    <body> 
       {% block content %}
          Inhalt des Körpers
       {% endblock %} 
    </body>
 </html>

hello.html

# Dateiname : example.py
# Urheberrecht : 2020 Durch w3codebox
# Autor durch: de.oldtoolbag.com
# Datum : 2020-08-08
{% extends "main_template.html" %}
 {% block title %}我的Hello页面{% endblock %}
 {% block content %}
 Hello World!!!<p>今天是{{today}}</p>
 我们在这里
 {% if today.day == 1 }%
 这个月的第一天。
 {% elif today == 30 %}
 这个月的最后一天。
 {% else %}
 我不知道。
 {% endif %}
 <p>
    {% for day in days_of_week %}
    {{day}}
 </p>
 {% endfor %}
 {% endblock %}

在上面的示例中,在调用 /myapp/hello,我们仍然会得到相同的结果和以前一样,但现在我们靠的是扩展,并不需要重构代码-−

在 main_template.html 中,我们定义了使用标签块。标题栏块将包含页面标题,而内容块将在页面主内容中。在 Home.html 中使用扩展继承自 main_template.html,那么我们使用上面定义的块(内容和标题)。

注释标签

注释标签用于模板定义注释,不是HTML注释,它们将不会出现在HTML页面。它可以是一个文件或只是一行代码的注释。