denken == gratis?

Einführung in Wagtail

Als Beispiel erstellen wir nun eine App, um eine Art Kontaktbuch mit Informationen zu Personen zu speichern.

Um den Django-Code sauber und von unterschiedlichen Funktionen getrennt zu behandeln, arbeitet man mit verschiedenen Apps, also kleinere Features mit eigenen Templates, Models, Views, und wenn es nötig ist auch eigenen Urls. Um so eine App zu erstellen, gibt man in der Konsole einfach folgendes ein:

$ python3 manage.py startapp [NAME_DER_APP]

In dieser App findet man nun verschiedene Dateien, ich spreche jetzt mal die wichtigsten für diese Zwecke an.

In der views.py findet man die Logik der Applikation, das bedeutet, dass man hier das Template rendern kann (mehr Möglichkeiten folgen), sowie Funktionen für die Daten schreiben kann, sei es das Wetter für eine Stadt fetchen, oder auch mathematische Berechnungen für einen Umrechner.

Die models.py ist für die Struktur der Seiten wichtig. Für jede Seite werden Funktionen in Python geschrieben, welche zum Beispiel die Eckdaten einer Personen enthalten, wie Geburtstag, Alter, Geschlecht, etc. Dafür wird festgelegt, dass Alter ein Integer ist, und Geschlecht ein Feld, in dem nur männlich und weiblich ausgewählt werden können - also keine Daten, sondern nur die Arten der Felder / Daten.

apps.py dient der Referenz der App zum Projekt, wird die App nicht referenziert, wird sie auch nicht debuggt und ignoriert. Um eine App zu referenzieren, muss sie in der settings.py zu INSTALLED_APPS hinzugefügt werden. Diese Datei findet man in /path/to/project/project_name/settings.py.

Um die App zu referenzieren, fügt man in der Liste von INSTALLED_APPS einfach


'[NAME_DER_APP].apps.[NAME_DER_APP]Config',

hinzu. Man sollte den Namen der Config jedoch jedes mal vorher überprüfen, da er anders formatiert werden kann, als man ihn eingespeichert hat. Eine sauberere Lösung bei vielen Apps ist es jedoch, einen neuen Ordner für Apps zu erstellen und die Apps dort alle zu lagern, dementsprechend muss die Referenz angepasst werden.

In dem Ordner, welcher den selben Namen wie das Projekt trägt, findet man zudem die urls.py, in dem das Routing bestimmt werden kann. Um unsere App hinzuzufügen, ist im Moment nichts nötig, da Wagtail das Routing selbst übernimmt. Bisher sollte daher in der urls.py nur ein leerer Pfad für die wagtail_urls sowie ein Pfad wie CMS oder auch Admin festgelegt sein, um die wagtailadmin_urls einzuschließen. Zum Beispiel:

from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
from wagtail.core import urls as wagtail_urls

from django.urls import path, re_path, include

urlpatterns = [
    # Hier gelangt man zum Admin-Panel
    re_path(r'^admin/', include(wagtailadmin_urls)),
    # Und hier zu den Wagteil-Seiten
    re_path(r'', include(wagtail_urls)),
]

Hat man das so angepasst, hat man die URLs, welche für das reine benutzen einer Website mit Wagtail zu nutzen sind, will man allerdings auch reine HTML Inhalte ausgeben will, zum Beispiel eine Kontaktseite, so kann man dies in der views.py der App als:

from django.shortcuts import render_to_response

def website (request):
    return render_to_response('/path/to/your/site.html')

Und dann fügt man in der urls.py noch folgendes hinzu:

from django.urls import path
# Die views.py der App hinzufügen
from myApp import views as MyView

# in den urlpatterns die Weiterleitung
urlpatterns = [
    # was bisher da ist
    path(r'^kontakt', MyView.website, name='Kontakt'),

Bocian67