{"id":577547,"date":"2025-06-26T02:05:02","date_gmt":"2025-06-26T01:05:02","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=pycharm&#038;p=577547"},"modified":"2025-06-26T02:05:10","modified_gmt":"2025-06-26T01:05:10","slug":"der-ultimative-leitfaden-fuer-django-templates","status":"publish","type":"pycharm","link":"https:\/\/blog.jetbrains.com\/de\/pycharm\/2025\/06\/der-ultimative-leitfaden-fuer-django-templates\/","title":{"rendered":"Der ultimative Leitfaden f\u00fcr Django Templates"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-542829\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/06\/PC-social-BlogFeatured-1280x720-2x-23.png\" alt=\"Der ultimative Leitfaden f\u00fcr Django Templates\" width=\"2560\" height=\"1440\" \/><\/figure>\n<p>Django Templates (Vorlagen) sind ein wesentlicher Bestandteil des Frameworks. Wenn Sie verstehen, was sie sind und wozu sie dienen, k\u00f6nnen Sie nahtlose, anpassbare und funktionale Vorlagen f\u00fcr Ihre <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\">Django<\/a>-Websites und -Apps erstellen.<\/p>\n<p>Wenn Sie gerade erst mit dem Framework zu arbeiten beginnen und Ihr erstes <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/creating-and-running-your-first-django-project.html\" target=\"_blank\" rel=\"noopener\">Django-Projekt<\/a> einrichten m\u00f6chten, ist es wichtig, sich mit Templates auszukennen. In diesem Leitfaden finden Sie alles, was Sie \u00fcber Django Templates wissen m\u00fcssen, einschlie\u00dflich der verschiedenen Typen und wie Sie diese verwenden.<\/p>\n<h2 class=\"wp-block-heading\">Was sind Django Templates?<\/h2>\n<p><a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">Django Templates<\/a> sind ein grundlegender Bestandteil des Django-Frameworks. Sie erm\u00f6glichen es Ihnen, die visuelle Pr\u00e4sentation Ihrer Website vom zugrunde liegenden Code zu trennen. Eine Template enth\u00e4lt die statischen Teile der gew\u00fcnschten HTML-Ausgabe und eine spezielle Syntax, die beschreibt, wie dynamische Inhalte eingef\u00fcgt werden sollen.<\/p>\n<p>Letztendlich k\u00f6nnen Templates komplette Webseiten generieren, w\u00e4hrend Datenbankabfragen und andere Datenverarbeitungsaufgaben von <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/pycharm\/2025\/01\/django-views\/\">Views<\/a> und <a href=\"https:\/\/docs.djangoproject.com\/en\/5.1\/topics\/db\/models\/\" target=\"_blank\" rel=\"noopener\">Models<\/a> \u00fcbernommen werden. Diese Trennung sorgt f\u00fcr sauberen, wartungsf\u00e4higen Code, da die HTML-Gesch\u00e4ftslogik vom Python-Code im Rest Ihres Django-Projekts getrennt bleibt. Ohne Templates m\u00fcssten Sie HTML direkt in Ihren Python-Code einbetten, was das Lesen und Debuggen erschwert.<\/p>\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Django Templates in 3 Minutes: A Quick Guide to Template Creation\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/EfSGuO4tVu4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n<p>Hier ist ein Beispiel f\u00fcr eine Django Template, die HTML, die Variable <code>`name`<\/code> und grundlegende `<code>if\/else<\/code>`-Logik enth\u00e4lt.<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;h1>Welcome!&lt;\/h1>\n\n\n{% if name %}\n  &lt;h1>Hello, {{ name }}!&lt;\/h1>\n{% else %}\n  &lt;h1>Hello, Guest!&lt;\/h1>\n{% endif %}\n&lt;h1>{{ heading }}&lt;\/h1><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Vorteile von Templates<\/h3>\n<p>Entwickler*innen verwenden Django Templates, um schnell und effizient zuverl\u00e4ssige Apps zu erstellen. Weitere wichtige Vorteile von Templates sind folgende:<\/p>\n<ul>\n<li><strong>Wiederverwendbarkeit von Code<\/strong>: Wiederverwendbare Komponenten und Layouts k\u00f6nnen erstellt werden, um die Konsistenz \u00fcber Seiten und Apps hinweg zu gew\u00e4hrleisten.<\/li>\n<li><strong>Einfachere Wartung<\/strong>: Das Erscheinungsbild von Webseiten kann ge\u00e4ndert werden, ohne die zugrunde liegende Logik zu modifizieren.<\/li>\n<li><strong>Optimierte Lesbarkeit:<\/strong> HTML-Code bleibt \u00fcbersichtlich und verst\u00e4ndlich, ohne auf komplexe Logik angewiesen zu sein.<\/li>\n<li><strong>Template-Vererbung<\/strong>: Gemeinsame Strukturen und Layouts k\u00f6nnen erstellt werden, um Redundanz zu minimieren und Konsistenz zu f\u00f6rdern.<\/li>\n<li><strong>Dynamische Inhalte<\/strong>: Es ist m\u00f6glich, personalisierte Webseiten zu erstellen, die sich an Eingaben von Benutzer*innen und Daten\u00e4nderungen anpassen.<\/li>\n<li><strong>Leistungsoptimierung<\/strong>: Templates k\u00f6nnen zwischengespeichert werden, um die Leistung von Apps oder Websites zu verbessern.<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\">Herausforderungen und Einschr\u00e4nkungen<\/h3>\n<p>Templates sind zwar f\u00fcr das Rendern von Webseiten in Django unerl\u00e4sslich, sollten aber mit Bedacht eingesetzt werden, insbesondere bei komplexen Projekten mit gr\u00f6\u00dferen Datens\u00e4tzen. Obwohl die Template-Sprache von Django relativ simpel ist, k\u00f6nnen \u00fcberm\u00e4\u00dfig komplizierte Templates mit zahlreichen verschachtelten Tags, Filtern und Vererbungen schwer zu verwalten und zu warten sein. Anstatt zu viel Logik in Ihre Templates einzubauen, sollten diese sich auf die Pr\u00e4sentation konzentrieren. Die Individualisierungsoptionen sind ebenfalls eingeschr\u00e4nkt, es sei denn, Sie erstellen Ihre eigenen Tags oder Filler.<\/p>\n<p>Die Migration auf eine andere Template-Engine ist unter Umst\u00e4nden eine Herausforderung, da die Standard-Engine von Django eng mit dem <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/what-is-the-django-web-framework\/\">Framework<\/a> verbunden ist. Der Wechsel zu einer Alternative wie Jinja ist jedoch relativ einfach. Wir werden diese M\u00f6glichkeit sp\u00e4ter im Rahmen dieses Leitfadens besprechen.<\/p>\n<h3 class=\"wp-block-heading\">Debuggen von Django Templates<\/h3>\n<p>In bestimmten F\u00e4llen, vor allem wenn Schwierigkeiten auftreten, kann es hilfreich sein, den Aufbau Ihrer Template zu \u00fcberpr\u00fcfen. Dazu k\u00f6nnen Sie Template-Debugging verwenden.<\/p>\n<p>Template-Debugging konzentriert sich auf die Erkennung von Fehlern in der Art und Weise, wie HTML und dynamische Daten interagieren. Zu den h\u00e4ufigsten Problemen z\u00e4hlen fehlende Variablen, falsche Template-Tags und Logikfehler.<\/p>\n<p>Gl\u00fccklicherweise bietet Django hilfreiche Tools wie <code>{{ debug }}<\/code> zur \u00dcberpr\u00fcfung Ihrer Templates und detaillierte Fehlerseiten an, die auf das Problem hinweisen. So k\u00f6nnen Sie Schwierigkeiten leichter erkennen sowie beheben und sicherstellen, dass Ihre Templates wie erwartet gerendert werden.<\/p>\n<h2 class=\"wp-block-heading\">Django Template Language (DTL) verstehen<\/h2>\n<p>Die Django Template Language (DTL) ist die in Django integrierte Template-Engine, welche die Erstellung von dynamischen Webseiten vereinfacht. Sie verbindet HTML nahtlos mit Django-spezifischen Tags und Filtern, sodass Sie direkt aus Ihrer <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/04\/create-a-django-app-in-pycharm\/\">Django-App<\/a> heraus komplexe, datenbasierte Inhalte generieren k\u00f6nnen. Sehen wir uns einige der wichtigsten Features an, welche die DTL zu einem leistungsstarken Tool f\u00fcr die Erstellung von Templates machen.<\/p>\n<h3 class=\"wp-block-heading\">Grundlegende Syntax und Struktur der DTL<\/h3>\n<p>Django Templates werden in einer Kombination aus HTML- und DTL-Syntax geschrieben. Die Grundstruktur einer Django Template besteht aus HTML-Markup mit eingebetteten Django-Tags und Variablen.<\/p>\n<p>Hier ist ein Beispiel:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!DOCTYPE html>\n&lt;html>\n  &lt;head>\n    &lt;title>{{ page_title }}&lt;\/title>\n  &lt;\/head>\n  &lt;body>\n    &lt;h1>{{ heading }}&lt;\/h1>\n    &lt;ul>\n      {% for item in item_list %}\n        &lt;li>{{ item.name }}&lt;\/li>\n      {% endfor %}\n    &lt;\/ul>\n  &lt;\/body>\n&lt;\/html><\/pre>\n<h3 class=\"wp-block-heading\">Variablen, Filter und Tags<\/h3>\n<p>Die DTL verf\u00fcgt \u00fcber mehrere Funktionen f\u00fcr die Arbeit mit Variablen, Filtern und Tags:<\/p>\n<ul>\n<li><strong>Variablen<\/strong>: Variablen zeigen dynamische Daten in Ihren Templates an. Sie werden in doppelten geschweiften Klammern eingeschlossen, z.\u00a0B. <code>{{ variable_name }}<\/code>.<\/li>\n<li><strong>Filter<\/strong>: Filter \u00e4ndern oder formatieren den Wert einer Variable, bevor Sie ihn rendern. Sie werden mit einem Pipe-Zeichen ( | ) angewendet, z. B. <code>{{ variable_name|upper }}<\/code>.<\/li>\n<li><strong>Tags<\/strong>: Tags steuern die Logik und den Flow Ihrer Templates. Sie werden in <code>{% %}<\/code>-Bl\u00f6cke eingeschlossen und k\u00f6nnen verschiedene Operationen wie Schleifen, Bedingungen und Template-Inclusions ausf\u00fchren.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\">PyCharm<\/a>, eine professionelle IDE f\u00fcr die Django-Entwicklung, vereinfacht die Arbeit mit Django Templates durch Syntaxhervorhebung, welche Tags, Variablen und HTML zur besseren Lesbarkeit farblich codiert. Au\u00dferdem bietet die IDE Fehlererkennung in Echtzeit, die sicherstellt, dass Sie keine schlie\u00dfenden Tags \u00fcbersehen oder die Syntax falsch setzen. Dank Auto-Completion f\u00fcr Variablen und Tags k\u00f6nnen Sie schneller und mit weniger Fehlern programmieren.<\/p>\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/1.mov\"><\/video><\/figure>\n\n\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Starten Sie mit PyCharm Pro kostenlos durch<\/a><\/div>\n<\/div>\n<h3 class=\"wp-block-heading\">Template-Vererbung und Erweiterung von Basis-Templates<\/h3>\n<p>Das Framework-System f\u00fcr Template-Vererbung erm\u00f6glicht es Ihnen, eine Basis-Template zu erstellen, welche die Standardstruktur und das Layout f\u00fcr Ihre Website oder App enth\u00e4lt.<\/p>\n<p>Sie k\u00f6nnen dann untergeordnete Templates anlegen, welche die Eigenschaften der Basis-Template erben und bei Bedarf bestimmte Abschnittsbl\u00f6cke \u00fcberschreiben. Dies f\u00f6rdert die Wiederverwendung von Code und die Konsistenz \u00fcber Ihre verschiedenen Templates hinweg.<\/p>\n<p>Um eine Basis-Template zu erstellen, definieren Sie Bl\u00f6cke mit dem Tag <code>{% block %}<\/code>:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- base.html -->\n&lt;!DOCTYPE html>\n&lt;html>\n  &lt;head>\n    &lt;title>{% block title %}Default Title{% endblock %}&lt;\/title>\n  &lt;\/head>\n  &lt;body>\n    {% block content %}\n    {% endblock %}\n  &lt;\/body>\n&lt;\/html><\/pre>\n\n\n<p>Untergeordnete Templates erweitern dann die Basis-Templates und \u00fcberschreiben bestimmte Bl\u00f6cke:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;!-- child_template.html -->\n{% extends 'base.html' %}\n\n{% block title %}My Page Title{% endblock %}\n\n{% block content %}\n  &lt;h1>My Page Content&lt;\/h1>\n  &lt;p>This is the content of my page.&lt;\/p>\n{% endblock %}<\/pre>\n\n\n<h2 class=\"wp-block-heading\">Django-Template-Tags<\/h2>\n<p>Tags sind ein wesentliches Element von Django Templates. Sie bieten verschiedene Funktionen \u2013 von bedingtem Rendering und Schleifen bis hin zu Template-Vererbung und -Inclusion.<\/p>\n<p>Lassen Sie uns einen genaueren Blick darauf werfen.<\/p>\n<h3 class=\"wp-block-heading\">H\u00e4ufige Django-Template-Tags<\/h3>\n<p>Es gibt mehrere Template-Tags in Django, aber das sind jene, die Sie wahrscheinlich am h\u00e4ufigsten verwenden werden:<\/p>\n<ul>\n<li><code>{% if %}<\/code>: Mit diesem Tag k\u00f6nnen Sie Inhalte auf der Grundlage einer bestimmten Bedingung rendern. Dieses Tag wird oft mit <code>{% else %}<\/code> und <code>{% elif %}<\/code> verwendet.<\/li>\n<li><code>{% for %}<\/code>: Das Tag <code>{% for %}<\/code> wird genutzt, um eine Sequenz, z. B. eine Liste oder ein Abfragen-Set, zu durchlaufen und den Inhalt f\u00fcr jedes Element in der Sequenz zu rendern.<\/li>\n<li><code>{% include %}<\/code>: Mit diesem Tag k\u00f6nnen Sie den Inhalt einer anderen Template-Datei in die aktuelle Vorlage einf\u00fcgen. Das erleichtert die Wiederverwendung gemeinsamer Template-Snippets \u00fcber mehrere Vorlagen hinweg.<\/li>\n<li><code>{% block %}<\/code>: Das Tag <code>{% block %}<\/code> wird in Verbindung mit der Template-Vererbung verwendet. Es definiert einen Inhaltsblock, der bei der Erweiterung einer Basis-Template von untergeordneten Vorlagen \u00fcberschrieben werden kann.<\/li>\n<li><code>{% extends %}<\/code>: Dieses Tag gibt die Basis-Template der aktuellen Vorlage an, von der sie erben soll.<\/li>\n<li><code>{% url %}<\/code>: Dieses Tag wird genutzt, um eine URL f\u00fcr ein benanntes URL-Muster in Ihrem Django-Projekt zu erzeugen. So k\u00f6nnen Sie Ihre Templates von den eigentlichen URL-Pfaden entkoppeln.<\/li>\n<li><code>{% load %}<\/code>: Mit dem Tag <code>{% load %}<\/code> k\u00f6nnen Sie benutzerdefinierte Template-Tags und -Filter aus einem Python-Modul oder einer Bibliothek laden und so die Funktionalit\u00e4t des Django-Template-Systems erweitern.<\/li>\n<\/ul>\n<p>Dies sind nur einige Beispiele f\u00fcr die zahlreichen in Django verf\u00fcgbaren Template-Tags. Tags wie <code>{% with %}<\/code>, <code>{% cycle %}<\/code>, <code>{% comment %}<\/code> und weitere bieten mehr Funktionen f\u00fcr fortgeschrittene Projekte und helfen Ihnen bei der Erstellung individueller sowie effizienter Apps.<\/p>\n<h3 class=\"wp-block-heading\">Verwendung von Template-Tags<\/h3>\n<p>Hier finden Sie ein ausf\u00fchrliches Beispiel daf\u00fcr, wie Sie Tags in einer Django-Template verwenden k\u00f6nnen:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{% extends 'base.html' %}\n{% load custom_filters %}\n\n{% block content %}\n  &lt;h1>{{ page_title }}&lt;\/h1>\n  {% if object_list %}\n    &lt;ul>\n      {% for obj in object_list %}\n&lt;!-- We truncate the object name to 25 characters. -->\n        &lt;li>{{ obj.name|truncate:25 }}&lt;\/li>\n      {% endfor %}\n    &lt;\/ul>\n  {% else %}\n    &lt;p>No objects found.&lt;\/p>\n  {% endif %}\n\n  {% include 'partials\/pagination.html' %}\n{% endblock %}<\/pre>\n\n\n<p>In diesem Beispiel erweitern wir eine Basis-Template, laden benutzerdefinierte Filter und definieren dann einen Block f\u00fcr den Hauptinhalt.<\/p>\n<p>Innerhalb des Blocks stellen wir fest, ob eine <code>object_list<\/code> vorhanden ist, und wenn dies der Fall ist, gehen wir sie durch und zeigen die abgek\u00fcrzten Namen der Objekte an. Falls die Liste leer ist, wird die Meldung \u201eNo objects found\u201c (\u201eKeine Objekte gefunden\u201c) angezeigt.<\/p>\n<p>Schlie\u00dflich f\u00fcgen wir noch eine partielle Template f\u00fcr die Seitennummerierung hinzu. Bei dieser Template handelt es sich um ein wiederverwendbares HTML-Snippet, das in andere Vorlagen eingef\u00fcgt werden kann, sodass Sie gemeinsame Elemente (wie z. B. die Seitennummerierung) effizienter verwalten und aktualisieren k\u00f6nnen.<\/p>\n<h2 class=\"wp-block-heading\">Django-Admin-Templates<\/h2>\n<p>Die integrierte Admin-Schnittstelle von Django bietet Ihnen eine benutzerfreundliche und intuitive M\u00f6glichkeit, Ihre Anwendungsdaten zu verwalten. Sie basiert auf einer Reihe von Templates, die ihre Struktur, ihr Layout und ihr Erscheinungsbild definieren.<\/p>\n<h3 class=\"wp-block-heading\">Funktionalit\u00e4t<\/h3>\n<p>Django-Admin-Templates erf\u00fcllen verschiedene Aufgaben:<\/p>\n<ul>\n<li><strong>Authentifizierung<\/strong>: Regelt die Authentifizierung, Anmeldung und Abmeldung von Benutzer*innen.<\/li>\n<li><strong>Modellverwaltung<\/strong>: Zeigt Listen von Modellinstanzen an und erstellt, bearbeitet sowie l\u00f6scht Instanzen nach Bedarf.<\/li>\n<li><strong>Formular-Rendering<\/strong>: Rendert Formulare zum Erstellen und Bearbeiten von Modellinstanzen.<\/li>\n<li><strong>Navigation<\/strong>: Rendert die Navigationsstruktur der Admin-Schnittstelle, einschlie\u00dflich des Hauptmen\u00fcs und der App-spezifischen Untermen\u00fcs.<\/li>\n<li><strong>Seitennummerierung<\/strong>: Rendert die Steuerelemente f\u00fcr die Seitennummerierung bei der Anzeige von Modellinstanzen-Listen.<\/li>\n<li><strong>Verlaufsverfolgung<\/strong>: Zeigt und verwaltet den \u00c4nderungsverlauf von Modellinstanzen.<\/li>\n<\/ul>\n<p>Die integrierten Admin-Templates von Django bieten eine solide Grundlage f\u00fcr die Verwaltung der Daten Ihrer Anwendung.<\/p>\n<h3 class=\"wp-block-heading\">Anpassung von Admin-Templates<\/h3>\n<p>Wenngleich die Admin-Templates von Django eine gute, funktionale Schnittstelle bieten, m\u00f6chten Sie vielleicht ihr Erscheinungsbild oder Verhalten an die Bed\u00fcrfnisse Ihres Projekts anpassen.<\/p>\n<p>Sie sind in der Lage, Anpassungen vorzunehmen, um das Branding an Ihr Projekt anzugleichen, die Erfahrung von Benutzer*innen zu optimieren oder spezielle Funktionen hinzuzuf\u00fcgen, die Ihre App einzigartig machen.<\/p>\n<p>Es gibt mehrere M\u00f6glichkeiten, dies zu tun:<\/p>\n<ul>\n<li><strong>Templates \u00fcberschreiben<\/strong>: Sie k\u00f6nnen die Standard-Admin-Templates \u00fcberschreiben, indem Sie Vorlagen mit derselben Dateistruktur und Namenskonvention im Templates-Verzeichnis Ihres Projekts erstellen. Django verwendet dann automatisch Ihre benutzerdefinierten Templates anstelle der integrierten.<\/li>\n<li><strong>Basis-Templates erweitern<\/strong>: Viele der Admin-Templates von Django werden mithilfe von Template-Vererbung erstellt. Sie k\u00f6nnen Vorlagen erstellen, welche die Basis-Admin-Templates erweitern und bestimmte Bl\u00f6cke oder Abschnitte \u00fcberschreiben.<\/li>\n<li><strong>Template-Optionen<\/strong>: Django verf\u00fcgt \u00fcber verschiedene Template-Optionen, mit denen Sie das Verhalten der Admin-Schnittstelle anpassen k\u00f6nnen. Dazu geh\u00f6rt die Anzeige bestimmter Felder, die Angabe, welche Felder bearbeitbar sein sollen, und die Definition von individuellen Templates f\u00fcr bestimmte Modellfelder.<\/li>\n<li><strong>Anpassung der Admin-Website<\/strong>: Sie k\u00f6nnen das Erscheinungsbild und das Verhalten der Admin-Website anpassen, indem Sie die Klasse <code>AdminSite<\/code> als Unterklasse einbinden und Ihre eigene Admin-Website bei Django registrieren.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">URL-Templating in Django<\/h2>\n<p>URL-Templates in Django bieten eine flexible M\u00f6glichkeit, URLs f\u00fcr Webanwendungen zu definieren und zu generieren.<\/p>\n<h3 class=\"wp-block-heading\">URL-Templates verstehen<\/h3>\n<p>In Django definieren Sie URL-Muster in der Datei urls.py des Projekts mithilfe der Funktion path aus dem Modul django.urls.<\/p>\n<p>Diese bilden bestimmte URL-Muster auf Python-Funktionen (Views) ab, welche die entsprechenden HTTP-Anfragen bearbeiten.<\/p>\n<p>Hier ist ein Beispiel f\u00fcr ein grundlegendes URL-Muster in Django:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nfrom django.urls import path\nfrom . import views\n\nurlpatterns = [\n    path('', views.home, name='home'),\n    path('about\/', views.about, name='about'),\n]<\/pre>\n\n\n<p>In diesem Beispiel entspricht das URL-Muster <code>\u2018 \u2018<\/code> der View-Funktion <code>views.home<\/code> und das URL-Muster <code>\u2018about\/\u2019<\/code> der <code>views.about<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Dynamische URL-Generierung mit URL-Templates<\/h3>\n<p>URL-Templates in Django erm\u00f6glichen es Ihnen, Variablen oder Parameter in Ihre URL-Muster aufzunehmen. Das bedeutet, dass Sie dynamische URLs erstellen k\u00f6nnen, die verschiedene Instanzen derselben Ressource darstellen oder mehr Daten enthalten.<\/p>\n<p>Wenn Ihre urls.py-Datei andere URL-Dateien mit <code>include()<\/code> einbindet, sammelt und erkennt PyCharm automatisch alle verschachtelten Routen und stellt so sicher, dass die Vorschl\u00e4ge f\u00fcr URL-Namen einschl\u00e4gig bleiben. Sie k\u00f6nnen auch zu URL-Definitionen navigieren, indem Sie <em>Strg<\/em> gedr\u00fcckt halten und auf einen URL-Namen klicken, um direkt zu dessen Quelle zu springen, auch wenn die URL in einer untergeordneten Datei definiert ist.<\/p>\n<p>Schauen wir uns ein Beispiel f\u00fcr eine URL-Template mit einer Variable an:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># urls.py\nurlpatterns = [\n    path('blog\/&lt;int:year>\/', views.year_archive, name='blog_year_archive'),\n]<\/pre>\n\n\n<p>In diesem Fall enth\u00e4lt die URL <code>\u2018blog\/\/\u2019<\/code> eine Variable year vom Typ <code>int<\/code>. Wenn eine Anfrage diesem Muster entspricht, \u00fcbergibt Django den Wert f\u00fcr das Jahr als Argument an die View-Funktion <code>views.year_archive<\/code>.<\/p>\n<h3 class=\"wp-block-heading\">Verwendung von Django-URLs<\/h3>\n<p>Django-URLs sind die Grundlage jeder Anwendung und funktionieren durch die Verkn\u00fcpfung von Benutzer*innen-Anfragen mit den entsprechenden Views. Durch die Definition von URL-Mustern, die bestimmten Views entsprechen, sorgt Django daf\u00fcr, dass Ihre Website \u00fcbersichtlich und skalierbar bleibt.<\/p>\n<h4 class=\"wp-block-heading\">Verwendung von URL-Template mit der Django-Funktion <code>reverse<\/code><\/h4>\n<p>Mit der Django-Funktion <code>reverse<\/code> k\u00f6nnen Sie URLs auf der Grundlage ihrer benannten URL-Muster generieren. Sie nimmt den Namen des URL-Musters als erstes Argument vor allen anderen erforderlichen Argumenten und gibt die entsprechende URL zur\u00fcck.<\/p>\n<p>Hier ist ein praktisches Beispiel daf\u00fcr:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># views.py\nfrom django.shortcuts import render\nfrom django.urls import reverse\n\ndef blog_post_detail(request, year, month, slug):\n    # ...\n    url = reverse('blog_post_detail', args=[year, month, slug])\n    return render(request, 'blog\/post_detail.html', {'url': url})<\/pre>\n\n\n<p>Die reverse-Funktion wird verwendet, um die URL f\u00fcr das URL-Muster <code>\u2018blog_post_detail\u2019<\/code> zu generieren, wobei die Werte year, month und <a href=\"https:\/\/docs.djangoproject.com\/en\/dev\/glossary\/#term-slug\" target=\"_blank\" rel=\"noopener\">slug<\/a> als Argumente \u00fcbergeben werden.<\/p>\n<p>Sie k\u00f6nnen dann die zur\u00fcckgegebene URL in Templates oder anderen Anwendungsteilen verwenden.<\/p>\n<h4 class=\"wp-block-heading\">Verwendung von URL-Tags in Django Templates<\/h4>\n<p>Das Django-Template-Tag <code>{% url %}<\/code> erm\u00f6glicht eine elegante Generierung von URLs direkt in Ihrer Vorlage. Vermeiden Sie das Hardcoding von URLs und verwenden Sie benannte URL-Muster; das macht Ihre Templates flexibler und einfacher zu verwalten.<\/p>\n<p>Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"html\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;a href=\"{% url 'blog_post_detail' year=2024 month=10 slug=post.slug %}\"> \nRead More \n&lt;\/a><\/pre>\n\n\n<p>In diesem Fall erstellt das Tag <code>{% url %}<\/code> eine URL f\u00fcr die View <code>blog_post_detail<\/code> und gibt die Parameter <code>year<\/code>, <code>month<\/code> und <code>slug<\/code> weiter. Es ist wichtig, dass diese Argumente mit dem URL-Muster \u00fcbereinstimmen, das in Ihrer urls.py-Datei definiert ist. Das sollte wie folgt aussehen:<\/p>\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">path('blog\/&lt;int:year>\/&lt;int:month>\/&lt;slug:slug>\/', views.blog_post_detail, name='blog_post_detail'),<\/pre>\n\n\n<p>Auf diese Weise bleiben Ihre Templates \u00fcbersichtlich und anpassungsf\u00e4hig, insbesondere wenn sich Ihr Projekt weiterentwickelt.<\/p>\n<h2 class=\"wp-block-heading\">Jinja vs. Django Templates<\/h2>\n<p>Obwohl Django mit einer eingebauten Template-Engine (DTL) ausgestattet ist, haben Entwickler*innen auch die M\u00f6glichkeit, Alternativen wie Jinja zu verwenden.<\/p>\n<p><a href=\"https:\/\/jinja.palletsprojects.com\/en\/stable\/\" target=\"_blank\" rel=\"noopener\">Jinja<\/a> ist eine beliebte, moderne und vielseitige Template-Engine f\u00fcr Python. Urspr\u00fcnglich wurde sie f\u00fcr das <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/11\/django-vs-flask-which-is-the-best-python-web-framework\/\">Flask<\/a>-Web-Framework entwickelt, ist aber auch mit Django kompatibel.<\/p>\n<p>Die Engine wurde so konzipiert, dass sie schnell, sicher und sehr anpassungsf\u00e4hig ist. Ihr umfassendes Feature-Set und ihre Flexibilit\u00e4t erm\u00f6glichen die vielseitige Erstellung dynamischer Inhalte.<\/p>\n<p>Zu den wichtigsten Funktionen und Vorteilen von Jinja gegen\u00fcber der DTL von Django z\u00e4hlen:<\/p>\n<ul>\n<li>eine pr\u00e4gnantere und intuitivere Syntax.<\/li>\n<li>die Ausf\u00fchrung in einer Sandbox f\u00fcr erh\u00f6hte Sicherheit gegen Code-Injection-Angriffe.<\/li>\n<li>ein flexibleres und leistungsf\u00e4higeres Vererbungssystem.<\/li>\n<li>bessere Debugging-Tools und Reporting-Mechanismen.<\/li>\n<li>h\u00f6here Leistung bei der Arbeit mit komplexen Templates oder gro\u00dfen Datens\u00e4tzen.<\/li>\n<li>verbesserte Funktionalit\u00e4t mit integrierten Filtern und Makros, die eine komplexere Rendering-Logik erm\u00f6glichen, ohne die Template zu \u00fcberladen.<\/li>\n<\/ul>\n<p>PyCharm kann den Dateityp *.jinja automatisch erkennen und bietet Syntaxhervorhebung, Code-Completion und Fehlererkennung sowie Unterst\u00fctzung f\u00fcr benutzerdefinierte Filter und Erweiterungen, um ein reibungsloses Entwicklungserlebnis zu gew\u00e4hrleisten.<\/p>\n<p>Trotz dieser Vorteile sollten Sie nicht vergessen, dass die Integration von Jinja in ein Django-Projekt eine komplexere Einrichtung und weiterf\u00fchrende Konfiguration erfordert.<\/p>\n<p>Einige Entwickler*innen ziehen es daher vielleicht vor, bei der in Django integrierten Template-Engine zu bleiben, um sich vollkommen im Django-\u00d6kosystem zu bewegen.<\/p>\n<h3 class=\"wp-block-heading\">Schnellere Programmierung mit Django-Live-Templates<\/h3>\n<p>Dank des Live-Vorlagen-Features von PyCharm k\u00f6nnen Sie h\u00e4ufig verwendete Code-Snippets mit einem einfachen Schl\u00fcsselwort-Kurzbefehl schnell einf\u00fcgen.<\/p>\n<p>Um Live-Templates zu verwenden, dr\u00fccken Sie einfach <em>\u2318J<\/em>, geben Sie <code>ListView<\/code> ein und bet\u00e4tigen Sie die Tabulatortaste.<\/p>\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/02\/2-1.mov\"><\/video><\/figure>\n\n\n<p>Dies reduziert das Volumen an Textbaustein-Code, beschleunigt die Entwicklung und gew\u00e4hrleistet eine einheitliche Syntax. Sie k\u00f6nnen sogar <strong>Ihre eigenen Templates anpassen oder erstellen<\/strong>, um spezifischen Projektbed\u00fcrfnissen gerecht zu werden. Dieses Feature ist besonders n\u00fctzlich f\u00fcr die DTL-Syntax, in der Schleifen, Bedingungen und Blockstrukturen h\u00e4ufig wiederholt werden.<\/p>\n<h2 class=\"wp-block-heading\">Verwendung von Django Templates: Best Practices und Tipps<\/h2>\n<p>Django Templates ist eine tolle M\u00f6glichkeit, die Pr\u00e4sentationsebene Ihrer Web-Apps zu verwalten.<\/p>\n<p>Es ist unerl\u00e4sslich, die empfohlenen Vorgehensweisen zu befolgen und die Leistung zu optimieren, damit Ihre Templates wartungsf\u00e4hig, sicher und methodisch sind.<\/p>\n<p>Hier finden Sie einige Best Practices und Tipps, die Sie bei der Verwendung von Django Templates beachten sollten:<\/p>\n<ul>\n<li><strong>Trennen Sie Pr\u00e4sentation und Gesch\u00e4ftslogik<\/strong>. Konzentrieren Sie sich bei Templates auf das Rendering von Daten und f\u00fchren Sie komplexe Vorg\u00e4nge in Views oder Models durch.<\/li>\n<li><strong>Organisieren Sie Ihre Templates logisch.<\/strong> Folgen Sie der Dateistruktur von Django, indem Sie die Vorlagen nach App sowie Funktionalit\u00e4t trennen und bei Bedarf Unterverzeichnisse verwenden.<\/li>\n<li><strong>Verwenden Sie die Namenskonventionen von Django<\/strong>. Django folgt dem Prinzip \u201eKonvention vor Konfiguration\u201c und erm\u00f6glicht es Ihnen, Ihre Templates auf eine bestimmte Weise zu benennen, sodass Sie den Vorlagennamen nicht explizit angeben m\u00fcssen. Wenn Sie beispielsweise klassenbasierte Views wie <code>ListView<\/code> verwenden, sucht Django automatisch nach einer Template namens <strong>\/_list.html<\/strong> und vereinfacht so Ihren Code.<\/li>\n<li><strong>Zerlegen Sie aufwendige Aufgaben in wiederverwendbare Komponenten.<\/strong> F\u00f6rdern Sie die Wiederverwendung von Code und verbessern Sie die Wartungsf\u00e4higkeit, indem Sie Template-Tags, Filter und Includes verwenden.<\/li>\n<li><strong>Folgen Sie konsistenten Namenskonventionen.<\/strong> Verwenden Sie klare und beschreibende Namen f\u00fcr Ihre Templates, Tags und Filter. Das macht es f\u00fcr andere Entwickler*innen einfacher, Ihren Code zu lesen.<\/li>\n<li><strong>Verwenden Sie die sicheren Rendering-Filter von Django.<\/strong> Escapen Sie immer die von Benutzer*innen bereitgestellten Daten vor dem Rendering, um XSS-Schwachstellen zu vermeiden.<\/li>\n<li><strong>Dokumentieren Sie komplexe Template-Logik.<\/strong> Hinterlassen Sie verst\u00e4ndliche Kommentare, um komplizierte Teile Ihrer Vorlagen zu erkl\u00e4ren. Dies wird anderen (und Ihnen selbst) helfen, Ihren Code zu verstehen.<\/li>\n<li><strong>Profilieren Sie Ihre Templates<\/strong>. Nutzen Sie die Profiling-Tools von Django, um Performance-Bottlenecks wie ineffiziente Schleifen und verschachtelte Logik zu finden und zu optimieren.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.jetbrains.com\/guide\/django\/links\/django-in-pycharm-tips-reloaded\/\" target=\"_blank\" rel=\"noopener\">Sehen Sie sich dieses Video an<\/a>, um Django-Tipps zu erhalten und PyCharm-Funktionen genauer kennenzulernen.<\/p>\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n<p>Ganz gleich, ob Sie eine einfache Website oder eine kompliziertere App entwickeln: Sie sollten jetzt wissen, wie Sie Django Templates erstellen, welche die Erfahrung Ihrer Benutzer*innen verbessern und Ihren Entwicklungsprozess rationalisieren.<\/p>\n<p>Aber Templates sind nur eine Komponente des Django-Frameworks. Entdecken Sie unsere anderen <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/tag\/django\/\">Django-Blogs<\/a> und -Ressourcen, die Ihnen dabei helfen, <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2024\/01\/how-to-learn-django\/\">Django zu verstehen<\/a>, lernen Sie die <a href=\"https:\/\/blog.jetbrains.com\/pycharm\/2023\/12\/django-5-0-delight-unraveling-the-newest-features\/\">neuesten Funktionen von Django<\/a> kennen und vieles mehr. Vielleicht m\u00f6chten Sie sich auch mit der <a href=\"https:\/\/docs.djangoproject.com\/en\/5.0\/\" target=\"_blank\" rel=\"noopener\">offiziellen Dokumentation von Django<\/a> vertraut machen.<\/p>\n<h2 class=\"wp-block-heading\">Zuverl\u00e4ssiger Django-Support in PyCharm<\/h2>\n<p>Vom Neuling bis zum*zur erfahrenen Entwickler*in: <a href=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\" target=\"_blank\" rel=\"noopener\" data-type=\"link\" data-id=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\">PyCharm Professional<\/a> steht Ihnen zur Seite, um Ihren Django-Entwicklungsworkflow zu optimieren.<\/p>\n<p>Die Django-IDE bietet Django-spezifische Code-Hilfe, Debugging, Live-Vorschauen, projekt\u00fcbergreifende Navigation und Refactoring-Funktionen. PyCharm bietet vollst\u00e4ndige Unterst\u00fctzung f\u00fcr Django Templates, sodass Sie diese m\u00fchelos verwalten und bearbeiten k\u00f6nnen. Au\u00dferdem ist es Ihnen m\u00f6glich, sich mit einem einzigen Klick mit Ihrer Datenbank zu verbinden und nahtlos mit TypeScript, JavaScript sowie anderen Frontend-Frameworks arbeiten.<\/p>\n<p>Alle Einzelheiten zur Arbeit mit Django Templates in PyCharm finden Sie in unserer <a href=\"https:\/\/www.jetbrains.com\/help\/pycharm\/templates.html\" target=\"_blank\" rel=\"noopener\">Dokumentation<\/a>. Denjenigen, die sich noch nicht so gut mit dem Django-Framework auskennen, sei zun\u00e4chst unser umfassendes Tutorial w\u00e4rmstens empfohlen, in dem alle Schritte zur <a href=\"https:\/\/www.jetbrains.com\/guide\/django\/tutorials\/django-aws\/setup-django\/\" target=\"_blank\" rel=\"noopener\">Erstellung einer neuen Django-App in PyCharm<\/a> erl\u00e4utert werden.<\/p>\n<p>Sind Sie bereit loszulegen? Laden Sie PyCharm jetzt herunter und freuen Sie sich \u00fcber einen produktiveren Entwicklungsprozess.<\/p>\n<div class=\"buttons\">\n<div class=\"buttons__row\"><a class=\"btn\" href=\"https:\/\/www.jetbrains.com\/de-de\/pycharm\/web-development\/django\/\" target=\"\" rel=\"noopener\">Starten Sie mit PyCharm Pro kostenlos durch<\/a><\/div>\n<\/div>\n<p><strong>Autorin des urspr\u00fcnglichen Blogposts<\/strong><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/03\/evgenia-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Evgenia Verbina\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Evgenia Verbina<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":811,"featured_media":577549,"comment_status":"closed","ping_status":"closed","template":"","categories":[1401,2347,8377],"tags":[963],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/577547"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/types\/pycharm"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/users\/811"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/comments?post=577547"}],"version-history":[{"count":8,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/577547\/revisions"}],"predecessor-version":[{"id":577881,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/pycharm\/577547\/revisions\/577881"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media\/577549"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media?parent=577547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/categories?post=577547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/tags?post=577547"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/cross-post-tag?post=577547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}