Meine Website hat wenige globale Konfigurationen. Zum Beispiel "SMTP-Server-Adresse", "Firmenadresse", etc.
Natürlich kann ich:
settings.py
und verwenden Sie sie in Vorlagen und Apps; Configuration
) und schreiben Sie alle benötigten Felder dort. Wenn ich den ersten Weg benutze, kann ich keinen Zugriff zum Ändern dieser Felder in django-admin geben.
Wenn ich Sekunden benutze, ist das keine schöne Lösung, denn überall im Code werde ich model_name.objects.get(id=1)
verwenden und ich brauche nur eine Instanz. Modelle wurden für andere Aufgaben erstellt.
Wie kann ich dieses Problem lösen?
Das habe ich getan. Vielleicht nicht die optimale Lösung, aber funktioniert für mich.
Erstellen Sie ein Konfigurationsmodell und machen Sie alle üblichen Dinge wie in Ihrem Punkt 2. Erstellen Sie eine Funktion (sagen wir in configuration.view
), die die Konfigurationswerte in einem dict herauszieht und zurückgibt.
Importieren Sie nun in Ihrer settings.py
Ihre Funktion und setzen Sie das zurückgegebene dict auf eine Variable settings.py
:
CONFIG = configuration.view.get_config()
Erstellen Sie einen Vorlagenkontextprozessor, der dieses CONFIG
dict im Vorlagenkontext einstellt.
Fügen Sie diesen Kontextprozessor zu Ihrem TEMPLATE_CONTEXT_PROCESSORS
Nun können Sie Ihre Konfigurationsparameter in Vorlagen als {{my_config_key}}
Hoffe, das hilft.
Schauen Sie sich Ссылка an aus meiner ähnlichen Frage Django-Einstellungen zur Laufzeit ändern
In Bezug auf die Notation id = 1, a) können Sie auf Ihrem Manager ein entsprechendes Attribut definieren Ссылка b) Ja, das ist immer noch eine Datenbankabfrage - checkout Ссылка für einen Ansatz mit faulem Zugriff und Caching.
Tags und Links python django django-admin