Django-Einstellungen
Diese Dokumentation gilt für Djangos Entwicklerversion, die zum Teil erhebliche Unterschiede zur letzten veröffentlichen Version aufweist.
Eine Django-Einstellungsdatei enthält die Konfiguration deiner Django-Installation. Dieses Dokument erklärt, welche Einstellungen verfügbar sind und was sie bewirken.
Die Grundlagen
Eine Einstellungsdatei ist auch nur ein Python-Modul mit Variablen auf Modul-Ebene.
Hier siehst du eine Reihe von Beispieleinstellungen:
DEBUG = False
DEFAULT_FROM_EMAIL = 'webmaster@example.com'
TEMPLATE_DIRS = ('/home/templates/mike', '/home/templates/john')
Da eine Einstellungsdatei ein Python-Modul ist, gelten die folgenden Regeln:
Es erlaubt keine Python-Syntax Fehler.
Man kann mittels der normalen Python-Syntax dynamisch Einstellungen zuweisen.
Beispiel:
MY_SETTING = [str(i) for i in range(30)]
Man kann Inhalte von anderen Einstellungs-Dateien importieren.
Zuweisen der Einstellungen
Wenn du Django benutzen willst, musst vorher angeben welche Einstellungen verwendet werden sollen. Dies erreichst du mit der Umgebungsvariable DJANGO_SETTINGS_MODULE.
Der Inhalt von DJANGO_SETTINGS_MODULE sollte in der Python-Path Syntax geschrieben sein, z.B. mysite.settings. Beachte, dass das Einstellungsmodul im Python import search path zu finden sein muss.
Das django-admin-py Utility
Bei der Nutzung von django-admin.py kannst du entweder die Umgebungsvariable einmalig setzen oder das Einstellungsmodul bei jedem Lauf gesondert zuweisen.
Beispiel (Unix Bash Shell):
export DJANGO_SETTINGS_MODULE=mysite.settings django-admin.py runserver
Beispiel (Windows Shell):
set DJANGO_SETTINGS_MODULE=mysite.settings django-admin.py runserver
Nutze das --settings Kommandozeilen-Argument um die Einstellungsdatei manuell zuzuweisen:
django-admin.py runserver --settings=mysite.settings
Auf dem Server (mod_python)
In einer Live-Serverumgebung musst du Apache/mod_python mitteilen, welche Einstellungsdatei genutzt werden soll. Dies geschieht mittels SetEnv:
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
</Location>
Mehr Informationen dazu findest du in der Django mod_python Dokumentation
Standardeinstellungen
Eine Django-Einstellungsdatei muss nicht zwangsläufig jede Einstellungsvariable beinhalten. Jede Einstellungsvariable hat einen vernünftigen Standardwert, diese Werte findest du in der Datei django/conf/global_settings.py.
Hier ist der Ablauf den Django nutzt, um Einstellungen zu verarbeiten:
- Lade Einstellungen von global_settings.py.
- Lade Einstellungen von der zugewiesenen Einstellungsdatei und überschreibe dabei die globalen Einstellungen.
Beachte, dass eine Einstellungsdatei niemals die global_settings importieren sollte, da dies nur redundant ist.
Finde heraus, welche Einstellungen du geändert hast
Es gibt einen einfachen Weg um herauszufinden, welche Einstellungen von den Standardwerten abweichen. Das Kommando python manage.py diffsettings zeigt die Abweichungen zwischen den aktuellen Einstellungen und Djangos Standardeinstellungen.
Mehr Informationen findest du in der diffsettings Dokumentation.
Einstellungen im Python-Code nutzen
In deinen Django-Anwendungen kannst du die Einstellungen aus dem django.conf.settings Objekt importieren. Beispiel:
from django.conf import settings
if settings.DEBUG:
# Do something
Beachte, dass django.conf.settings kein Modul sondern ein Objekt ist. Damit ist es nicht möglich, individuelle Einstellungen zu importieren.
from django.conf.settings import DEBUG # Das funktioniert nicht.
Beachte auch, dass dein Code weder die Einstellungen aus den global_settings, noch aus deiner eigenen Einstellungsdatei direkt importieren sollte. django.conf.settings nutzt das Prinzip der Standard- und Seiten-spezifischen Einstellungen und stellt ein gesondertes Interface zur Verfügung. Außerdem wird damit der Zugriff auf die Einstellungen vom Ort der eigentlichen Einstellungsdatei getrennt.
Einstellungen zur Laufzeit ändern
Du solltest die Einstellungen in deiner Anwendung nicht zur Laufzeit ändern. Beispielsweise, mache dies nicht in einem View:
from django.conf import settings settings.DEBUG = True # Tu das nicht!
Der einzige Ort an dem du Einstellungen zuweisen solltest, ist die Einstellungsdatei.
Sicherheit
Da die Einstellungsdatei sensible Informationen, wie z.B. das Datenbank-Passwort, enthält, solltest du den Zugriff auf diese Datei auf ein Minimum reduzieren. Ändere z.B. die Dateirechte so, dass nur dir und dem Webserver Leserechte gewährt werden. Dies ist besonders in Shared-Hosting Umgebungen wichtig!
Verfügbare Einstellungen
Hier ist die komplette Liste aller verfügbaren Einstellungsmöglichkeiten, in alphabetischer Reichenfolge und mit ihren Standardwerten.
ABSOLUTE_URL_OVERRIDES
Standard: {} (Leeres Dictionary)
Ein Dictionary-Mapping im Format "app_label.model_name" : URL-Funktion das ein Model-Objekt aufruft und seine URL zurück gibt. Dies ist ein Weg, um get_absolute_url() in einer “per Installation” Basis zu übergehen. Beispiel:
ABSOLUTE_URL_OVERRIDES = {
'blogs.weblog': lambda o: "/blogs/%s/" % o.slug,
'news.story': lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
}
Beachte, dass der Model-Name in dieser Einstellung immer kleingeschrieben werden sollte, unabhängig davon in welcher Form der echte Model-Name ist.
ADMIN_FOR
Standard: () (Leeres Tupel)
Wird für die Einstellungsmodule der Administrationsoberfläche genutzt. Dies sollte ein Tupel aus Einstellungsmodulen (im Format 'foo.bar.baz') sein, welche in der Administrationsoberfläche dargestellt werden sollen.
Die Administrationsoberfläche nutzt dies in ihrer automatisch-geprüften Dokumentation von Datenmodelle, Views und Template-Tags.
ADMIN_MEDIA_PREFIX
Standard: '/media/'
Der URL-Präfix für die Admin-Mediendateien — CSS, JavaScript und Bilder. Achte auf den abschließenden Schrägstrich.
ADMINS
Standard: () (Leeres Tupel)
Ein Tupel die die Personen auflistet, welche Code-Error-Meldungen erhalten. Wenn DEBUG=False gesetzt ist und ein View eine Exception (Ausnahme) auslöst, wird Django eine E-Mail mit der kompletten Exception an diese Leute senden. Jedes Element dieses Tupels sollte wiederum ein Tupel aus (Voller Name, E-Mail-Adresse) enthalten. Beispiel:
(
('John', 'john@example.com'),
('Mary', 'mary@example.com')
)
Beachte, dass Django eine E-Mail an alle diese Personen schickt wenn ein Fehler auftritt. Mehr Informationen findest du in der Sektion Fehlerberichte per E-Mail
ALLOWED_INCLUDE_ROOTS
Standard: () (Leeres Tupel)
Ein Tupel mit Strings, das die erlaubten Präfixe für den {% ssi %} Template-Tag enthält. Dies ist eine Sicherheitsmaßnahme mit dem für Template-Autoren festgelegt werden kann, auf welche Dateien sie zugreifen dürfen — und nicht dürfen.
Wenn z.B. ALLOWED_INCLUDE_ROOTS auf ('/home/html', '/var/www') gesetzt ist, dann würde {% ssi /home/html/foo.txt %} funktionieren, {% ssi /etc/passwd %} aber nicht.
APPEND_SLASH
Standard: True
Schrägstriche werden automatisch an die URL angefügt. Diese Option ist nur aktiv, wenn CommonMiddleware installiert ist (Siehe dazu auf Middleware Dokumentation). Siehe auch PREPEND_WWW.
AUTHENTICATION_BACKENDS
Standard: ('django.contrib.auth.backends.ModelBackend',)
Ein Tupel mit Authentication Backend Classes (als Strings) die genutzt werden, wenn ein Benutzer authentifiziert werden soll. Nähere Details findest du in der Dokumentation zu Authentifizierungs-Backends.
AUTH_PROFILE_MODULE
Standard: Nicht definiert
Das seitenspezifische Benutzerprofil-Datenmodell, nährere Informationen in der Dokumentation über Benutzerprofil-Datenmodelle.
CACHE_BACKEND
Standard: 'simple://'
Das zu nutzende Cache-Backend. Siehe auch Cache Dokumentation.
CACHE_MIDDLEWARE_KEY_PREFIX
Standard: '' (Leerer String)
Der Cache-Key-Präfix den die Cache-Middleware nutzen soll. Siehe auch Cache Dokumentation.
CACHE_MIDDLEWARE_SECONDS
Standard: 600
Die Dauer in Sekunden, die eine Seite im Cache zwischengespeichert werden soll, wenn die Cache-Middleware oder der cache_page() Decorator genutzt wird.
DATABASE_ENGINE
Standard: '' (Leerer String)
Das Datenbank-Backend, das genutzt werden soll. Die mitgelieferten Backends sind 'postgresql_psycopg2', 'postgresql', 'mysql', 'mysql_old', 'sqlite3', 'oracle', und 'ado_mssql'.
In Djangos Entwicklerversion kannst du auch ein Datenbank-Backend nutzen, das nicht mitgeliefert wird. Ändere dazu die Option DATABASE_ENGINE in einen validen (fully-qualified) Pfad (z.B. mypackage.backends.whatever).
Wenn du ein komplett neues Datenbank-Backend schreiben willst, schau dir die anderen Datenbank-Backends als Beispiel an.
DATABASE_HOST
Standard: '' (Leerer String)
Gibt an, welcher Hostname genutzt werden soll, um die Verbindung zur Datenbank aufzubauen. Ein leerer String bedeutet localhost. Gilt nicht für SQLite.
Wenn der Wert mit einem Schrägstrich ('/') beginnt und du MySQL nutzt , dann wird MySQL über einen Unix-Socket mit dem angegebenen Socket verbunden. Beispiel:
DATABASE_HOST = ‘/var/run/mysql’
Wenn du MySQL nutzt und dieser Wert nicht mit einem Schrägstrich beginnt, wird angenommen, dass der Wert der Hostname ist.
Wenn du PostgreSQL nutzt, bedeutet ein leerer String, dass ein Unix Domain Socket für die Verbindung genutzt werden soll und keine Netzwerkverbindung zu localhost. Wenn du explizit eine lokale TCP/IP-Verbindung zu PostgreSQL aufbauen willst, gib hier localhost an.
DATABASE_NAME
Standard: '' (Leerer String)
Der Name der Datenbank. Bei SQLite der komplette Pfad zur Datenbankdatei.
DATABASE_OPTIONS
Standard: {} (Leeres Dictionary)
Zusätzliche Parameter, die bei der Verbindung zur Datenbank genutzt werden. Schaue in die Backend-Beschreibung für die verfügbaren Schlüsselwörter.
DATABASE_PASSWORD
Standard: '' (Leerer String)
Das Passwort, das bei der Verbindung zur Datenbank benutzt wird. Gilt nicht für SQLite.
DATABASE_PORT
Standard: '' (Leerer String)
Der Port, der bei der Verbindung zur Datenbank benutzt wird. Ein leerer String bedeutet den Standardport. Gilt nicht für SQLite.
DATABASE_USER
Standard: '' (Leerer String)
Der Benutzername, der bei der Verbindung zur Datenbank benutzt wird. Gilt nicht für SQLite.
DATE_FORMAT
Standard: 'N j, Y' (z.B. Feb. 4, 2003)
Das Standardformat, das für die Datumsfelder in Djangos Änderungsprotokoll — und möglicherweise anderen Teilen des Systems — genutzt wird. Siehe mögliche Formatierung des Datums.
Siehe auch DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT und MONTH_DAY_FORMAT.
DATETIME_FORMAT
Standard: 'N j, Y, P' (z.B. Feb. 4, 2003, 4 p.m.)
Das Standardformat, das für die Datumsfelder in Djangos Änderungsprotokoll — und möglicherweise anderen Teilen des Systems — genutzt wird. Siehe mögliche Formatierung des Datums.
Siehe auch DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT und MONTH_DAY_FORMAT.
DEBUG
Standard: False
Ein boolscher Wert, der den Debug-Modus an- oder ausschaltet.
Wenn du eigene Einstellungen definierst, findet sich in django/views/debug.py ein regulärer Ausdruck HIDDEN_SETTINGS welcher einige sensible Informationen ('SECRET', 'PASSWORD' oder 'PROFANITIES') im DEBUG-View versteckt. Dies erlaubt es, auch nicht vertrauenswürdigen Benutzern einen Backtrace zu zeigen, ohne solch sensible (oder für potenzielle Angreifer nützliche) Einstellungen offen legen zu müssen.
Beachte aber, dass es in der Debug-Ausgabe immernoch Werte gibt, die nicht für die Öffentlichkeit bestimmt sind. Pfade, Konfigurationsoptionen und andere Werte verhelfen Hackern zu zusätzlichen Informationen über deinen Server. Du solltest niemals deine Seite mit DEBUG = True öffentlich in Betrieb nehmen!
DEFAULT_CHARSET
Standard: 'utf-8'
Die standardmäßige Zeichenkodierung für alle HttpResponse Objekte, wenn der MIME-Typ nicht manuell eingestellt ist. Es wird mit DEFAULT_CONTENT_TYPE genutzt, um den Content-Type Header zu erstellen.
DEFAULT_CONTENT_TYPE
Standard: 'text/html'
Der standardmäßige Content-Typ für alle HttpResponse Objekte, wenn der MIME-Typ nicht manuell eingestellt ist. Es wird mit DEFAULT_CHARSET genutzt, um den Content-Type Header zu erstellen.
DEFAULT_FROM_EMAIL
Standard: 'webmaster@localhost'
Die Standard-E-Mail-Adresse für die automatische Kommunikation mit Site-Managern.
DEFAULT_TABLESPACE
Neu in Djangos Entwicklerversion
Standard: '' (Leerer String)
Der Standard-Tablespace von Datenmodellen, die keinen eigenen eingestellt haben. Nur nutzen, wenn es das Backend unterstützt.
DEFAULT_INDEX_TABLESPACE
Neu in Djangos Entwicklerversion
Standard: '' (Leerer String)
Der Standard-Tablespace von Feld-Indices, die keinen eigenen eingestellt haben. Nur nutzen, wenn es das Backend unterstützt.
DISALLOWED_USER_AGENTS
Standard: () (Leeres Tupel)
Eine Liste kompilierter regulärer Audrücke mit User-Agents-Strings, denen der Zugriff auf die gesamte Seite untersagt ist. Die Option ist z.B. gegen böse Robots/Crawler nützlich und wird nur genutzt, wenn CommonMiddleware installiert ist (siehe Middleware Dokumentation).
EMAIL_HOST
Standard: 'localhost'
Der Hostname, der zum Versenden von E-Mails genutzt wird.
Siehe auch EMAIL_PORT.
EMAIL_HOST_PASSWORD
Standard: '' (Leerer String)
Das Passwort, das für die Verbindung zum SMTP-Server (definiert in EMAIL_HOST) genutzt wird. Diese Einstellung ist nur in Verbindung mit EMAIL_HOST_USER sinnvoll. Wenn eine dieser beiden Einstellungen nicht gesetzt ist, wird Django keine Authentifizierung bei der Verbindung zum SMTP-Server durchführen.
Siehe auch EMAIL_HOST_USER.
EMAIL_HOST_USER
Standard: '' (Leerer String)
Der Benutzername für die Verbindung zum SMTP-Server, der in EMAIL_HOST definiert ist. Wenn das Feld leer ist, wird Django keine Authentifizierung durchführen.
Siehe auch EMAIL_HOST_PASSWORD.
EMAIL_PORT
Standard: 25
Der Port für die Verbindung zum SMTP-Server, der in EMAIL_HOST definiert ist.
EMAIL_SUBJECT_PREFIX
Standard: '[Django] '
Der Präfix, der in E-Mails dem Betreff vorangestellt ist, welche über django.core.mail.mail_admins oder django.core.mail.mail_managers versendet werden. Achte auf das Leerzeichen am Ende des Strings.
EMAIL_USE_TLS
Neu in Djangos Entwicklerversion
Standard: False
Wenn auf True gesetzt, wird eine verschlüsselte TLS-Verbindung mit dem SMTP-Server genutz.
FILE_CHARSET
Neu in Djangos Entwicklerversion
Standard: 'utf-8'
Die Zeichenkodierung, die genutzt wird, um Dateien von der Festplatte zu dekodieren. Das betrifft auch Template-Dateien und die SQL-Dateien bei Inbetriebnahme (initial SQL).
FIXTURE_DIRS
Standard: () (Leeres Tupel)
Eine Liste aller Verzeichnisse, in denen sich Fixture-Files finden, in Suchreihenfolge. Beachte, dass diese Pfade immer Unix-gemäße (Vorwärts-)Schrägstriche beinhalten sollen, auch unter Windows. Siehe auch Django-Anwendungen testen.
IGNORABLE_404_ENDS
Standard: ('mail.pl', 'mailform.pl', 'mail.cgi', 'mailform.cgi', 'favicon.ico', '.php')
Siehe IGNORABLE_404_STARTS und Fehlerberichte per E-Mail.
IGNORABLE_404_STARTS
Standard: ('/cgi-bin/', '/_vti_bin', '/_vti_inf')
Ein Tupel mit URL-Anfängen, die der 404-Mailer ignorieren soll. Siehe auch SEND_BROKEN_LINK_EMAILS, IGNORABLE_404_ENDS und die Sektion Fehlerberichte per E-Mail.
INSTALLED_APPS
Standard: () (Leeres Tupel)
Ein Tupel mit Strings, das alle aktivierten Anwendungen in dieser Django-Installation enthält. Jeder String sollte ein vollständiger Python-Pfad zu einem Python-Paket mit einer Django-Anwendung sein — das üblicherweise mit django-admin.py startapp erstellt wurde.
INTERNAL_IPS
Standard: () (Leeres Tupel)
Ein Tupel mit IP-Adressen (Strings) die:
- Debug Informationen sehen dürfen, wenn DEBUG auf True gestellt ist
- X-Header erhalten, wenn XViewMiddleware installiert ist (siehe Middleware Dokumentation)
JING_PATH
Standard: '/usr/bin/jing'
Der Pfad zur ausführbaren “Jing”-Datei. Jing ist ein RELAX-NG-Validator, den Django nutzt, um jedes XMLField in deinen Datenmodellen zu validieren.
LANGUAGE_CODE
Standard: 'en-us'
Ein String, der den Sprachcode für diese Installtion definiert. Er sollte immer im Standard Language Format definiert sein, z.B. ist U.S. English "en-us". Siehe dazu die Dokumentation zur Internationalisierung.
LANGUAGES
Standard: Ein Tupel mit allen verfügbaren Sprachen.
Da die Liste der unterstützten Sprachen ständig wächst, wäre eine Kopie hier schnell veraltet. Die aktuelle Liste aller übersetzten Sprachen findest du in django/conf/global_settings.py (oder schau in die Online-Quellen).
Die Liste besteht aus einem Tupel, das wiederum ein oder mehrere Tupel im Format (Sprachcode, Sprachname) enthält — zum Beispiel, ('ja', 'Japanese'). Dadurch werden die verfügbaren Sprachen in der Sprachauswahl angezeigt. Weitere Details findest du in der Dokumentation zur Internationalisierung.
Normalerweise sollte der Standardwert genügen. Setze diese Option nur ein, wenn du die Sprachauswahl auf eine Teilmenge der von Django mitgelieferten Sprachen begrenzen möchtest.
Wenn du eigene Einstellungen in LANGUAGES vornimmst, ist es in Ordnung, die Sprachnamen als Translation-Strings zu definieren (wie im Beispiel oben) — aber nutze eine “Dummy” gettext() Funktion und nicht die in django.utils.translation. Du solltest niemals django.utils.translation in deiner Einstellungsdatei importieren, da dieses Modul selbst auf die Einstellungen angewiesen ist und das würde einen rekursiven Import nach sich ziehen.
Die Lösung ist, eine “dummy” gettext() Funktion zu nutzen. Hier ist ein Beispiel:
gettext = lambda s: s
LANGUAGES = (
('de', gettext('German')),
('en', gettext('English')),
)
Mit diesem “Ausweg” wird make-messages.py diese Strings immer noch finden und als übersetzbare Strings markieren. Da die Übersetzung aber nicht zur Laufzeit stattfindet, musst du dich an diese Strings erinnern und in eine echte gettext() Funktion in all dem Code einsetzen, der LANGUAGES nutzt.
LOCALE_PATHS
Standard: () (Leeres Tupel)
Ein Tupel mit Verzeichnissen, in der Django nach Übersetzungsdateien sucht. Lies dazu die Dokumentation Internationalisierung, die die Variable und das Standard-Verhalten erklärt.
LOGIN_REDIRECT_URL
Neu in Djangos Entwicklerversion
Standard: '/accounts/profile/'
Die URL, zu der die Benutzer nach dem Login weitergeleitet werden, wenn dem contrib.auth.login View kein next Parameter zugewiesen wurde.
Dies wird zum Beispiel vom @login_required Decorator genutzt.
LOGIN_URL
Neu in Djangos Entwicklerversion
Standard: '/accounts/login/'
Die URL, zu der die Benutzer für den Login weitergeleitet werden, besonders bei der Nutzung des @login_required Decorator.
LOGOUT_URL
Neu in Djangos Entwicklerversion
Standard: '/accounts/logout/'
Das Pendant zu LOGIN_URL.
MANAGERS
Standard: () (Leeres Tupel)
Ein Tupel im selben Format wie ADMINS, das definiert, wer Benachrichtigung über kaputte Links erhalten soll, wenn SEND_BROKEN_LINK_EMAILS=True ist.
MEDIA_ROOT
Standard: '' (Leerer String)
Ein absoluter Pfad zum Verzeichnis, das die Mediendaten für diese Installation enthält. Beispiel:: "/home/media/media.lawrence.com/" Siehe auch MEDIA_URL.
MEDIA_URL
Standard: '' (Leerer String)
Die URL, die die Mediendaten aus MEDIA_ROOT enthält. Beispiel:: "http://media.lawrence.com"
Bachte, dass die URL mit einem Schrägstrich enden sollte, sofern sie weitere Pfadangaben enthält.
Gut: "http://www.example.com/static/" Schlecht: "http://www.example.com/static"
MIDDLEWARE_CLASSES
Standard:
("django.contrib.sessions.middleware.SessionMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.doc.XViewMiddleware")
Ein Tupel, das die Middleware-Klassen enthält, die genutzt werden sollen. Weitere Informationen findest du in Middleware Dokumentation.
MONTH_DAY_FORMAT
Standard: 'F j'
Das Standardformat das für die Datumsfelder in Djangos Änderungsprotokoll — und möglicherweise anderen Teilen des Systems — genutzt wird, wenn nur der Monat und der Tag angezeigt werden soll. Siehe mögliche Formatierung des Datums.
Wenn z.B. Djangos Änderungsprotokoll mittels des Datums gefiltert wird, wird im Seitenkopf der Tag und der Monat angezeigt. Verschiedene Sprachen haben verschiedene Formate dieser Ordnung. Im amerikanischen Englisch sagt man z.B. “January 1” wohingegen in Spanien “1 Enero” bevorzugt wird.
Siehe mögliche Formatierung des Datums. Siehe auch DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT und YEAR_MONTH_FORMAT.
PREPEND_WWW
Standard: False
Gibt an, ob “www.” an die URL vorangestellt werden soll, falls nicht vorhanden. Diese Funktion ist nur aktiv, wenn CommonMiddleware installiert ist (Siehe Middleware Dokumentation`_). Siehe auch APPEND_SLASH.
PROFANITIES_LIST
Ein Tupel mit vulgären Ausdrücken (Strings), die einen Validation-Error auslösen, wenn der hasNoProfanities Validator aufgerufen wird.
Wir listen die Standardeinträge hier nicht auf, denn das wäre zu vulgär. Eine vollständige Liste siehst du in der Datei django/conf/global_settings.py.
ROOT_URLCONF
Standard: Nicht definiert
Ein String mit dem kompletten Python-Pfad zu deiner Basis-URL-Konfiguration (URLConf). Beispiel: "mydjangoapps.urls" Lies dazu auch: Wie Django einen Request abarbeitet.
SECRET_KEY
Standard: '' (Leerer String)
Ein geheimer Schlüssel für diese Django-Installation. Er wird in Hash-Algorithmen als Anfangswert (Seed) genutzt. Setze diese Wert auf einen zufälligen String — je länger desto besser. django-admin.py startproject erstellt diesen Wert automatisch.
SEND_BROKEN_LINK_EMAILS
Standard: False
Wenn auf True gesetzt, wird eine E-Mail an alle MANAGERS gesendet, sobald jemand einen toten Link besucht. Oder besser gesagt wenn:
- der Benutzer deine Django-Seite besucht
- diese einen 404-Fehlercode zurück gibt
- der Benutzer einen Referer mitsendet
Diese Funktion ist nur aktiv, wenn CommonMiddleware installiert ist. (Siehe Middleware Dokumentation). Siehe auch IGNORABLE_404_STARTS, IGNORABLE_404_ENDS und die Sektion Fehlerberichte per E-Mail.
SERIALIZATION_MODULES
Standard: Nicht definiert.
Ein Dictionary mit Modulen, die Serializer-Definitionen (als String) enthalten. Der Schlüsselindex ist die Identifikation für den Serializer-Typ. Um bspw. den YAML-Serializer zu definieren, nutze:
SERIALIZATION_MODULES = { ‘yaml’ : ‘path.to.yaml_serializer’ }
SERVER_EMAIL
Standard: 'root@localhost'
Die E-Mail-Adresse, die als Absenderadresse von Fehlermeldungen benutzt wird, wie die an ADMINS und MANAGERS.
SESSION_ENGINE
Neu in Djangos Entwicklerversion
Standard: django.contrib.sessions.backends.db
Gibt an, wo die Session-Daten gespeichert werden. Gültige Werte sind:
- 'django.contrib.sessions.backends.db'
- 'django.contrib.sessions.backends.file'
- 'django.contrib.sessions.backends.cache'
Siehe auch Session Dokumentation.
SESSION_COOKIE_AGE
Standard: 1209600 (2 Wochen, in Sekunden)
Das Alter der Session-Cookies in Sekunden. Siehe auch Session Dokumentation.
SESSION_COOKIE_DOMAIN
Standard: None
Die Domain für die Session-Cookies. Setze diesen String z.B. auf ".lawrence.com" für Domain-übergreifende Cookies (Cross Domain Cookies) oder setze ihn auf None für den Standard-Domain-Cookie. Siehe auch Session Dokumentation.
SESSION_COOKIE_NAME
Standard: 'sessionid'
Der Name des Cookies, der für die Sessions benutzt wird. Dieser String kann beliebig gesetzt werden. Siehe auch Session Dokumentation.
SESSION_COOKIE_PATH
Neu in Djangos Entwicklerversion
Standard: '/'
Der Pfad der im Session-Cookie gesetzt wird. Dieser sollte entweder zum URL-Pfad deiner Django-Installtion oder einem darüber liegenden Pfad passen.
Diese Option ist nützlich, wenn du mehrere Django-Installationen unter einem Hostnamen nutzt. Jede Instanz kann seinen eigenen Cookie-Pfad haben und jede bekommt nur ihre eigenen Cookies.
SESSION_COOKIE_SECURE
Standard: False
Gibt an, ob ein sicherer Cookie für die Session genutzt werden soll. Wenn dieser Wert auf True gesetzt ist, werden Cookies als sicher (secure) markiert, was den Webbrowser dazu veranlasst, diesen Cookie nur in einer HTTPS-Verbindung zu senden. Siehe auch Session Dokumentation.
SESSION_EXPIRE_AT_BROWSER_CLOSE
Standard: False
Gibt an, ob der Cookie verfallen soll, wenn der Benutzer den Webbrowser schließt. Siehe auch Session Dokumentation.
SESSION_FILE_PATH
Neu in Djangos Entwicklerversion
Standard: /tmp/
Wenn du ein dateibasiertes Session-Backend nutzt, setzt diese Option das Verzeichnis, in dem Django die Session-Daten speichern wird. Mehr Informationen findest du in der Session Dokumentation.
SESSION_SAVE_EVERY_REQUEST
Standard: False
Gibt an, ob die Session-Daten bei jedem Request gespeichert werden sollen. Siehe auch Session Dokumentation.
SITE_ID
Standard: Nicht definiert
Die ID der aktuellen Site (als Integer) in der django_site Datenbank-Tabelle. Die ID wird genutzt, damit sich Anwendungsdaten in spezifische Seiten einhaken können. Damit kann eine einzige Datenbank den Inhalt verschiedener Seiten verwalten.
Mehr Informationen dazu findest du in der Dokumentation des Site Frameworks.
TEMPLATE_CONTEXT_PROCESSORS
Standard:
("django.core.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media")
Ein Tupel mit aufrufbaren Funktionen, die dazu genutzt werden, den Kontext im RequestContext zu definieren. Diese Prozessoren nehmen ein Request-Objekt als Argument und geben ein Dictionary zurück, das dem Kontext hinzugefügt wird.
TEMPLATE_DEBUG
Standard: False
Ein boolscher Wert, der den Debug-Modus an- oder ausschaltet. Wenn diese Option auf True gesetzt ist, wird eine schicke Fehlerseite mit einem detailierten Fehlerbericht für jeden TemplateSyntaxError angezeigt. Dieser Bericht enthält den relevanten Teil des Templates, in dem die dazugehörige Zeile hervorgehoben ist.
Beachte, dass Django diesen Fehlerbericht nur anzeigt, wenn DEBUG auf True gesetzt ist.
Siehe auch DEBUG.
TEMPLATE_DIRS
Standard: () (Leeres Tupel)
Eine Liste aller Verzeichnisse, die Template-Dateien enthalten, in der Reihenfolge, wie sie vom Django erkannt werden sollen. Beachte, dass diese Pfade immer Unix-gemäße (Vorwärts-)Schrägstriche beinhalten sollten, auch unter Windows.
Siehe auch Template Dokumentation.
TEMPLATE_LOADERS
Standard: ('django.template.loaders.filesystem.load_template_source',)
Ein Tupel mit aufrufbaren Funktionen (als Strings) die Templates aus verschiedenen Quellen importieren können. Mehr Informationen dazu findest du in Template Dokumentation.
TEMPLATE_STRING_IF_INVALID
Standard: '' (Leerer String)
Die Ausgabe (als String), den das Template-System bei invaliden (z.B. falsch geschriebenen) Variablen nutzen soll. Siehe auch Wie werden ungültige Variablen gehandhabt.
TEST_DATABASE_CHARSET
Neu in Djangos Entwicklerversion
Standard: None
Die Zeichenkodierung, die die Datenbank zum Erstellen der Test-Datenbank nutzt. Der Wert dieses Strings wird direkt an die Datenbank übergeben, damit ist das Format Backend-spezifisch.
Unterstützt für die PostgreSQL (postgresql, postgresql_psycopg2) und MySQL (mysql, mysql_old) Backends.
TEST_DATABASE_COLLATION
Neu in Djangos Entwicklerversion
Standard: None
Die Sortierreihenfolge (collation order), die die Datenbank zum erstellen der Test-Datenbank nutzt. Die Sortierreihenfolge wird direkt an die Datenbank übergeben, damit ist das Format Backend-spezifisch.
Derzeit werden nur die mysql und mysql_old Backends unterstützt. (Mehr Details findest du im Abschnitt 10.3.2 des MySQL Handbuchs).
TEST_DATABASE_NAME
Standard: None
Der Name der Datenbank, wenn die Test-Suite gestartet wird. Wenn der Wert None ist, wird die Datenbank den Namen 'test_' + settings.DATABASE_NAME nutzen. Siehe Django-Anwendungen testen.
TEST_RUNNER
Standard: 'django.test.simple.run_tests'
Der Name der Methode, die die Test-Suite startet. Siehe Django-Anwendungen testen.
TIME_FORMAT
Standard: 'P' (e.g. 4 p.m.)
Das Standardformat, das für die Datumsfelder in Djangos Änderungsprotokoll — und möglicherweise anderen Teilen des Systems — genutzt wird, wenn nur der Monat und der Tag angezeigt werden soll. Siehe mögliche Formatierung des Datums.
Siehe auch DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT, YEAR_MONTH_FORMAT und MONTH_DAY_FORMAT.
TIME_ZONE
Standard: 'America/Chicago'
Der String repräsentiert die Zeitzone für diese Installation. Siehe mögliche Werte. Beachte, dass du in dieser Liste mehrere Felder in einer Zeile findest, nimm aber nur die Auswahl für deine Zeitzeone. Wenn zum Beispiel in einer Zeile steht: 'Europe/London GB GB-Eire'`, dann nutze ``'Europe/London' als deine TIME_ZONE Einstellung.
Denke auch daran, dass dies die Zeitzone ist, mit der Django alle Datums-/Zeitangaben konvertiert und nicht unbedingt mit der des Servers. Wenn auf dem Server mehrere Django-Instanzen laufen, dann kann jede ihre eigene Zeitzone haben.
Im Normalfall setzt Django die Variable os.environ['TZ'] auf die Zeitzone, die du in TIME_ZONE angegeben hast. Damit arbeiten alle deine Views und Datenmodelle automatisch mit der korrekten Zeitzone. Wenn du aber die manuelle Konfiguration (siehe unten) nutzt, wird Django die Umgebungsvariable TZ nicht ändern und es liegt dann an dir, alle Prozesse in der richtigen (Zeit-)Umgebung laufen zu lassen.
Note
Django kann die Zeitzonen nicht verlässlich unter Windows verwalten. Wenn du Django unter Windows einsetzen möchtest, sollte diese Variable zu der Zeitzone des Systems passen.
URL_VALIDATOR_USER_AGENT
Standard: Django/<version> (http://www.djangoproject.com/)
Der String, der Teil des User-Agent ist, wenn die Existenz von URLs geprüft wird. (Siehe dazu die verify_exists Option bei URLField).
USE_ETAGS
Standard: False
Ein boolscher Wert der angibt, ob der “Etag” Header genutzt werden soll. Dies spart Bandbreite, verringert aber auch die Performance. Diese Funktion wird nur genutzt, wenn CommonMiddleware installiert ist (Siehe Middleware Dokumentation).
USE_I18N
Standard: True
Ein boolscher Wert der angibt, ob Djangos Internationalisierungssystem (engl. internationalization, verkürzt: i18n) genutzt werden soll. Durch Ausschalten kann sehr einfach die Performance verbessert werden. Wenn der Wert auf False steht, wird Django einige Optimierungen vornehmen und den i18n-Mechanismus nicht laden.
YEAR_MONTH_FORMAT
Standard: 'F Y'
Das Standardformat, das für die Datumsfelder in Djangos Änderungsprotokoll — und möglicherweise anderen Teilen des Systems — genutzt wird, wenn nur der Monat und das Jahr angezeigt werden soll.
Wenn z.B. Djangos Änderungsprotokoll mittels des Datums gefiltert wird, wird im Seitenkopf der Monat und das Jahr angezeigt. Verschiedene Sprachen haben verschiedene Formate dieser Ordnung. Im amerikanischen Englisch sagt man z.B. “January 2006” wohingegen in anderen Sprachen “2006/January” bevorzugt wird.
Siehe mögliche Formatierung des Datums. Siehe auch DATE_FORMAT, DATETIME_FORMAT, TIME_FORMAT und MONTH_DAY_FORMAT.
Erstelle deine eigenen Einstellungen
Nichts hält dich davon ab, eigene Einstellungen in deine Django-Applikationen aufzunehmen. Beachte nur diese Richtlinien:
- Einstellungsnamen sind immer in Großbuchstaben zu schreiben.
- Für Einstellungen die Sequenzen sind, benutze Tupel statt Listen, das ist gut für die Performance.
- Erfinde keine bestehenden Einstellungen neu.
Einstellungen ohne das DJANGO_SETTINGS_MODULE nutzen
In einigen Fällen möchtest du vielleicht die Umgebugsvariable DJANGO_SETTINGS_MODULE umgehen, z.B. wenn du das Templatesystem nutzt und keine Umgebungsvariable zum Einstellungsmodul setzen möchtest.
In diesem Fall kannst du Djangos Einstellungen manuell setzen. Dies geschieht über den Aufruf von django.conf.settings.configure().
Beispiel:
from django.conf import settings
settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
TEMPLATE_DIRS=('/home/web-apps/myapp', '/home/web-apps/base'))
Übergib an configure() so viele Schlüsselwörter wie du möchtest, jedes Schlüsselwort repräsentiert eine Einstellung und ihren Wert. Argumente sollten immer in Großbuchstaben geschrieben werden und den selben Namen besitzen, wie die oben beschriebene Einstellung. Wenn eine einzelne Einstellung nicht mittels configure() übergeben wird — aber zu einem späteren Zeitpunkt gebraucht wird — wird Django den Standardwert nehmen.
Dieses Verhalten ist wichtig — und auch empfohlen — wenn du ein Stück eines Frameworks in einer größeren Anwendung nutzen willst.
Wenn Einstellungen konsequent mit settings.configure() konfiguriert werden, wird Django keine Änderungen an den Prozess-Umgebungsvariablen machen. (Siehe dazu auch die Erklärung von TIME_ZONE, wo dies normalerweise geschieht.) Es wird angenommen, dass du in diesem Fall die volle Kontrolle über die Umgebungsvariablen hast.
Eigene Default-Einstellungen
Wenn du mit eigenen Standard-Einstellungen arbeitest, die nicht in django.conf.global_settings definiert sind, kannst du diese dem Aufruf von configure() als Argument default_settings (oder als erste Argument-Position) zuweisen.
In diesem Beispiel werden die Standard-Einstellungen von myapp_defaults gesetzt, danach der Wert DEBUG auf True, unabhängig davon, was in myapp_defaults gesetzt ist:
from django.conf import settings from myapp import myapp_defaults settings.configure(default_settings=myapp_defaults, DEBUG=True)
Das folgende Beispiel (myapp_defaults wird als erstes Argument gesetzt) ist identisch.
settings.configure(myapp_defaults, DEBUG = True)
Normalerweise brauchst du Standardeinstellungen nicht in dieser Weise zu überschreiben. Die Django-Standards sind ausreichend sinnvoll, um sie sicher zu nutzen. Denke aber daran: Wenn du neue Standard-Einstellungen dem Standard-Modul übergibst, werden die Django-Standardeinstellungen komplett überschrieben. Damit musst du einen Standardwert für jede mögliche Einstellung setzen, der in deinem Code genutzt wird. Schaue in die Datei django.conf.settings.global_settings für eine vollständige Liste.
Entweder configure() oder das DJANGO_SETTINGS_MODULE wird benötigt
Wenn du die Umgebungsvariable DJANGO_SETTINGS_MODULE nicht setzt, musst du configure() aufrufen, bevor Code ausgeführt wird, der Einstellungen benötigt.
Wenn du DJANGO_SETTINGS_MODULE nicht setzt und auch nicht configure() aufrufst, wird Django einen ImportError auslösen, sobald eine Einstellung das erste mal aufgerufen wird.
Wenn du DJANGO_SETTINGS_MODULE gesetzt hast, auf die Einstellungen zugreifst und dann configure() aufrufst, wird Django einen RuntimeError auslösen und zeigen, das die Einstellungen bereits konfiguriert wurden.
Genauso fehlerhaft ist es, configure() mehr als ein mal aufzurufen oder configure() aufzurufen, wenn bereits auf eine Einstellung zugegriffen wurde.
Es reduziert sich damit auf folgendes: Benutze genau eins von configure() oder DJANGO_SETTINGS_MODULE, aber nicht beide zusammen, und auch nicht keins von beiden.
Fehlerberichte per E-Mail
Server Fehler
Wenn DEBUG auf False gesetzt ist, wird Django allen Benutzern die in ADMIN gelistet sind eine E-Mail senden, wenn dein Code eine unbehandelte Exception (Ausnahme) und einen Internal Server Error (HTTP Status Code 500) auslöst. Damit erhalten Administratoren über alle Fehler sofort eine Nachricht.
Entferne alle Einträge aus ADMINS um dieses Verhalten zu umgehen.
404 Fehler
Django wird eine Hinweis-E-Mail an alle Benutzer die in MANAGERS gelistet sind wenn:
- DEBUG auf False gesetzt ist
- SEND_BROKEN_LINK_EMAILS auf True gesetzt ist
- in MIDDLEWARE_CLASSES die CommonMiddleware gelistet ist
- dein Code einen 404-Fehler auslöst
- der Request einen Referer mitsendet
Es wird keine E-Mail gesendet, wenn der Request keinen Referer mitsendet.
Du kannst Django mit Hilfe der Optionen IGNORABLE_404_ENDS und IGNORABLE_404_STARTS so einstellen, dass nicht in allen Fällen eine 404-Hinweis-E-Mail gesendet wird. Beide Werte sollten eine Tuple mit String sein. Beispiel:
IGNORABLE_404_ENDS = ('.php', '.cgi')
IGNORABLE_404_STARTS = ('/phpmyadmin/',)
Bei diesem Beispiel werden URLs, die mit .php oder .cgi enden, keinen Fehlerbericht auslösen. Genauso URLs die mit /phpmyadmin/ beginnen.
Um diesese Verhalten auszuschalten, entferne alle Einträge aus der Einstellung MANAGERS.