{"id":8461,"date":"2021-10-18T20:59:20","date_gmt":"2021-10-18T18:59:20","guid":{"rendered":"https:\/\/via-internet.de\/blog\/?p=8461"},"modified":"2021-10-18T21:15:14","modified_gmt":"2021-10-18T19:15:14","slug":"django-how-to-templates-konfigurieren","status":"publish","type":"post","link":"https:\/\/via-internet.de\/blog\/2021\/10\/18\/django-how-to-templates-konfigurieren\/","title":{"rendered":"Django | How To &#8211; Templates konfigurieren"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Allgemein \/ Vorbereitung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um in einem Django-Projekt mit mehreren Anwendungen die HTML-Templates zu konfigurieren sind mehrere Schritte notwendig.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ausgangsbasis ist die nachfolgende Verzeichnisstruktur (ein Projekt mit 2 Anwendungen).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Basisprojekt einrichten<\/h3>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c pipenv --python 3.10\n\u279c pipenv shell<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c pip install django<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c djangop-admin startproject project<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c cd project\n\u279c mkdir apps<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c mkdir apps\\core\n\u279c django-admin startapp core apps\\core<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c mkdir apps\\frontend\n\u279c django-admin startapp frontend apps\\frontend<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Dies ergibt die folgende Verzeichnisstruktur:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"241\" height=\"172\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_027.png\" alt=\"\" class=\"wp-image-8507\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hinweis<\/strong>: der Befehl <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">startproject <\/code>erstellt einen Ordner <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">project<\/code>, indem er einen weiteren Ordner <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">project <\/code>erstellt. Der erste Ordner dient dazu, sowohl das Django-Projekt, als auch die erstellten Anwendungen an einer gemeinsame Stelle zu speichern.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der zweite Ordner project ist das Django-Projekt, in dem sich alle f\u00fcr das Projekt notwendigen Dateien befinden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wird in den nachfolgenden Beschreibungen vom dem Ordner <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">project <\/code>gesprochen, so ist immer der zweite gemeint (<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">project\/project<\/code>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c python manage.py migrate<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\u279c python manage.py createsuperuser --email admin@localhost --username admin\nPassword:\nPassword (again):\nSuperuser created successfully.<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Anwendungen hinzuf\u00fcgen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im n\u00e4chsten Schritt werden die beiden erstellten Anwendungen (<code>Core <\/code>und <code>Frontend<\/code>) dem Django-Projekt hinzugef\u00fcgt. Da sie in einem Unterverzeichnis (<code>apps<\/code>) liegen, muss ihre Konfiguration angepasst werden.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In dere Datei apps.py der jeweiligen Anwendung (<code>apps\/core\/apps.py<\/code> und <code>apps\/frontend\/apps.py<\/code>) wirr der Name angepasst:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1007\" height=\"597\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_004.png\" alt=\"\" class=\"wp-image-8465\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_004.png 1007w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_004-300x178.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_004-768x455.png 768w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hinweis<\/strong>: Ohne diese Anpassung w\u00fcrde beim Start des Servers eine Fehlermeldung angezeigt<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django.core.exceptions.ImproperlyConfigured: Cannot import 'frontend'. Check that 'apps.frontend.apps.FrontendConfig.name' is correct.<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Im Anschluss daran werden die beiden Anwendungen dem Projekt hinzugef\u00fcgt. Dies erfolgt in der Datei <code>project\/settings.py<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"9,10\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">INSTALLED_APPS = [\n    'django.contrib.admin',\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    'django.contrib.messages',\n    'django.contrib.staticfiles',\n\n    'apps.core',\n    'apps.frontend'\n]<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Einfache Views erstellen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Template ist die Basis eines Views. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Daher richten wir f\u00fcr jede Anwendung einen einfachen View ein: in <code>apps\/core\/views.py<\/code> und <code>apps\/frontend\/views.py<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.shortcuts import render\nfrom django.views import generic\n\nclass IndexView(generic.TemplateView):\n    \"\"\"\n    IndexView:\n    \"\"\"\n    module = 'indexView'\n    template_name = 'core\/index.html'<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"856\" height=\"624\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_005.png\" alt=\"\" class=\"wp-image-8466\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_005.png 856w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_005-300x219.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_005-768x560.png 768w\" sizes=\"auto, (max-width: 856px) 100vw, 856px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">URLs f\u00fcr die Anwendungen hinzuf\u00fcgen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im letzten Vorbereitungsschritt konfigurieren wir die URLs f\u00fcr unsere Anwendungen bzw die beiden eingerichteten Views:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">from django.contrib import admin\nfrom django.urls import path\n\nimport apps.core.views as core\nimport apps.frontend.views as frontend\n\nurlpatterns = [\n    path('admin\/', admin.site.urls),\n    path('frontend\/', frontend.IndexView.as_view(), name='index'),\n    path('core', core.IndexView.as_view(), name='index'),\n\n]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Als Ergebnis sollten wir bei beiden URLs einen Fehler sehen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dies was zu erwarten, da wir die notwendigen Templates ja erst jetzt einrichten werden:<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"584\" height=\"227\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_006.png\" alt=\"\" data-id=\"8469\" data-link=\"https:\/\/via-internet.de\/blog\/?attachment_id=8469\" class=\"wp-image-8469\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_006.png 584w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_006-300x117.png 300w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><img loading=\"lazy\" decoding=\"async\" width=\"533\" height=\"233\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_007.png\" alt=\"\" data-id=\"8470\" data-full-url=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_007.png\" data-link=\"https:\/\/via-internet.de\/blog\/?attachment_id=8470\" class=\"wp-image-8470\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_007.png 533w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_007-300x131.png 300w\" sizes=\"auto, (max-width: 533px) 100vw, 533px\" \/><\/figure><\/li><\/ul><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Template hinzuf\u00fcgen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen eines Templates f\u00fcr die Anwendung <code>core<\/code>: <code>apps\/core\/templates\/core\/index.html<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"223\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_008.png\" alt=\"\" class=\"wp-image-8472\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_008.png 720w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_008-300x93.png 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Der Verzeichnispfad des Templates setzt sich auch mehreren Teilen zusammen<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>apps\/core<\/td><td><\/td><td><\/td><td><\/td><td>Das Startverzeichnis der Anwendung<\/td><\/tr><tr><td><\/td><td>templates<\/td><td><\/td><td><\/td><td>Der Default-Name des Verzeichnisses, in dem Django nach Templates sucht<\/td><\/tr><tr><td><\/td><td><\/td><td>core<\/td><td><\/td><td>Der Namespace als Unterscheidung, wenn es Templates mit gleichem Namen gibt<\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><td>index.html<\/td><td>Der Name des Templates<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie die Daten apps\/core\/templates\/core\/index.html und \u00f6ffnen Sie dann den Browser:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/localhost:8000\/core\">http:\/\/localhost:8000\/core<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"675\" height=\"115\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_009.png\" alt=\"\" class=\"wp-image-8477\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_009.png 675w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_009-300x51.png 300w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Zum Vergleich \u00f6ffen wir die URL f\u00fcr unsere zweite Anwendung: frontend<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/localhost:8000\/frontend\">http:\/\/localhost:8000\/frontend<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"241\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_010.png\" alt=\"\" class=\"wp-image-8479\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_010.png 654w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_010-300x111.png 300w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Im unteren Teil der Fehlermeldung findet sich aber eine hilfreiche Information:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als erstes wir uns mitgeteilt, das ein gew\u00fcnschtes Template in der nachfolgenden Reihenfolge gesucht wird. Es werden als (wir oben bereits erw\u00e4hnt) mehrere Verzeichnisse durchsucht, um ein passendes Template zu finden.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Template-loader postmortem\nDjango tried loading these templates, in this order:\n\nUsing engine django:<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Als erstes werden Verzeichnisse der Django-Installation durchsucht. Hierunter liegen z. B. die Templates f\u00fcr die Administration oder die Anmeldung.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django.template.loaders.app_directories.Loader: \n...\\lib\\site-packages\\django\\contrib\\admin\\templates\\frontend\\index.html (Source does not exist)\n\ndjango.template.loaders.app_directories.Loader: \n...\\lib\\site-packages\\django\\contrib\\auth\\templates\\frontend\\index.html (Source does not exist)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Im Anschluss werden dann die Verzeichnisse unserer Anwendungen durchsucht.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django.template.loaders.app_directories.Loader: ...\\project\\apps\\core\\templates\\frontend\\index.html (Source does not exist)\n\ndjango.template.loaders.app_directories.Loader: ...\\project\\apps\\frontend\\templates\\frontend\\index.html (Source does not exist)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Um nun ein gew\u00fcnschtes Template zu finden, werden zwei Informationen ben\u00f6tigt:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><span style=\"color: initial;\">der Name des Template<\/span><\/li><li>das Verzeichnis<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Name des Templates<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Der Name des Templates wird im View angegeben<code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">: apps\/core\/views.py<\/code>:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class IndexView(generic.TemplateView):\n    module = 'indexView'\n    template_name = 'core\/index.html'<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Verzeichnis<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Das Verzeichnis selbst wird \u00fcber die Suchreihenfolge der zu verwendenden Template-Verzeichnisse ermittelt. Das erste Verzeichnis, dass das gew\u00fcnschte Template beinhaltet, wird verwendet.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ermitteln des Verzeichnisses<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Im Falle unserer Anwendung <code>frontend <\/code>werden die nachfolgenden Verzeichnisse durchsucht, ob sie das Template <code>core\/index.html<\/code> beinhalten:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Umgebung<\/th><th>Verzeichnis<\/th><th>Template gefunden<\/th><\/tr><\/thead><tbody><tr><td>DJANGO<\/td><td>lib\\site-packages\\django\\contrib\\admin\\templates<\/td><td><\/td><\/tr><tr><td>DJANGO<\/td><td>lib\\site-packages\\django\\contrib\\auth\\templates<\/td><td><\/td><\/tr><tr><td>PROJEKT<\/td><td>project\\apps\\core\\templates<\/td><td>core\/index.html<\/td><\/tr><tr><td>PROJEKT<\/td><td>project\\apps\\frontend\\templates<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Template hinzuf\u00fcgen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen eines Templates f\u00fcr die Anwendung <code>frontend<\/code>: <code>apps\/frontend\/templates\/frontend\/index.html<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"793\" height=\"234\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_011.png\" alt=\"\" class=\"wp-image-8484\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_011.png 793w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_011-300x89.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_011-768x227.png 768w\" sizes=\"auto, (max-width: 793px) 100vw, 793px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"813\" height=\"135\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_012.png\" alt=\"\" class=\"wp-image-8485\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_012.png 813w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_012-300x50.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_012-768x128.png 768w\" sizes=\"auto, (max-width: 813px) 100vw, 813px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Weiteres Beispiel: Suchen des passenden Templates<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Richten sie einen Neuen View in der Anwendung frontend ein: apps\/frontend\/views.py<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class BaseView(generic.TemplateView):\n    module = 'baseView'\n    template_name = 'base.html' <\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie eine URL f\u00fcr diesen View in <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">project\/urls.py<\/code><\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">urlpatterns = [\n    path('admin\/',      admin.site.urls),\n    path('core',        core.IndexView.as_view(),      name='index'),\n    path('frontend\/',   frontend.IndexView.as_view(),  name='index'),\n    path('base\/',       frontend.BaseView.as_view(),   name='base'),\n]<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie den Browser um diese URL anzuzeigen;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/localhost:8000\/base\/\">http:\/\/localhost:8000\/base<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Wie zu erwarten war, wird das Template nicht gefunden:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"242\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_014.png\" alt=\"\" class=\"wp-image-8490\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_014.png 700w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_014-300x104.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"167\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_016.png\" alt=\"\" class=\"wp-image-8491\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_016.png 843w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_016-300x59.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_016-768x152.png 768w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In keinem der bekannten Verzeichnisse gibt es ein Template <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">base.html<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gemeinsame Templates f\u00fcr alle Anwendungen<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Um Templates einzurichten, die von mehreren Anwendungen verwendet werden, empfiehlt es sich, ein Verzeichnis <code>templates <\/code>auf der gleichen Ebene, wie die Anwendungen, einzurichten<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"247\" height=\"89\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_020.png\" alt=\"\" class=\"wp-image-8495\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In der Datei <code>project\/settings.py<\/code> wird dieses Verzeichnis dem Django-Projekt hinzugef\u00fcgt.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">TEMPLATES = [\n    {\n        'BACKEND': 'django.template.backends.django.DjangoTemplates',\n        'DIRS': [os.path.join(BASE_DIR, 'templates')],\n        ....<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie den Browser um diese URL anzuzeigen;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/localhost:8000\/base\/\">http:\/\/localhost:8000\/base<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das zus\u00e4tzliche Verzeichnis wird nun auch durchsucht:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Template-loader postmortem\nDjango tried loading these templates, in this order:\n\nUsing engine django:<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"1\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django.template.loaders.filesystem.Loader: ...\\project\\templates\\base.html (Source does not exist)<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">django.template.loaders.app_directories.Loader: ...\\.venv\\lib\\site-packages\\django\\contrib\\admin\\templates\\base.html (Source does not exist)\ndjango.template.loaders.app_directories.Loader: ...\\.venv\\lib\\site-packages\\django\\contrib\\auth\\templates\\base.html (Source does not exist)\ndjango.template.loaders.app_directories.Loader: ...\\project\\apps\\core\\templates\\base.html (Source does not exist)\ndjango.template.loaders.app_directories.Loader: ...\\project\\apps\\frontend\\templates\\base.html (Source does not exist)<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Erstellen Sie nun in diesem Verzeichnis (<code>templates<\/code>) das Template <code data-enlighter-language=\"generic\" class=\"EnlighterJSRAW\">base.html<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"649\" height=\"171\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_019.png\" alt=\"\" class=\"wp-image-8494\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_019.png 649w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_019-300x79.png 300w\" sizes=\"auto, (max-width: 649px) 100vw, 649px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u00d6ffnen Sie den Browser um diese URL anzuzeigen;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"http:\/\/localhost:8000\/base\/\">http:\/\/localhost:8000\/base<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"789\" height=\"151\" src=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_021.png\" alt=\"\" class=\"wp-image-8496\" srcset=\"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_021.png 789w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_021-300x57.png 300w, https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_021-768x147.png 768w\" sizes=\"auto, (max-width: 789px) 100vw, 789px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Allgemein \/ Vorbereitung Um in einem Django-Projekt mit mehreren Anwendungen die HTML-Templates zu konfigurieren sind mehrere Schritte notwendig. Ausgangsbasis ist die nachfolgende Verzeichnisstruktur (ein Projekt mit 2 Anwendungen). Basisprojekt einrichten Dies ergibt die folgende Verzeichnisstruktur: Hinweis: der Befehl startproject erstellt einen Ordner project, indem er einen weiteren Ordner project erstellt. Der erste Ordner dient dazu, sowohl das Django-Projekt, als auch die erstellten Anwendungen an einer gemeinsame Stelle zu speichern. Der zweite Ordner project ist das Django-Projekt, in dem sich alle f\u00fcr das Projekt notwendigen Dateien befinden. Wird in den nachfolgenden Beschreibungen vom dem Ordner project gesprochen, so ist immer der zweite [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":8501,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8461","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein"],"jetpack_featured_media_url":"https:\/\/via-internet.de\/blog\/wp-content\/uploads\/2021\/10\/django_howto_templates_000c.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/8461","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/comments?post=8461"}],"version-history":[{"count":24,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/8461\/revisions"}],"predecessor-version":[{"id":8511,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/posts\/8461\/revisions\/8511"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media\/8501"}],"wp:attachment":[{"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/media?parent=8461"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/categories?post=8461"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/via-internet.de\/blog\/wp-json\/wp\/v2\/tags?post=8461"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}