Site-Konfiguration in django-admin

8

Meine Website hat wenige globale Konfigurationen. Zum Beispiel "SMTP-Server-Adresse", "Firmenadresse", etc.

Natürlich kann ich:

  1. Erstellen Sie eine Variable in settings.py und verwenden Sie sie in Vorlagen und Apps;
  2. Erstellen Sie ein Modell (wie 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?

    
SkyFox 25.03.2012, 07:51
quelle

3 Antworten

6

Das habe ich getan. Vielleicht nicht die optimale Lösung, aber funktioniert für mich.

  1. 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.

  2. 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()

  3. Erstellen Sie einen Vorlagenkontextprozessor, der dieses CONFIG dict im Vorlagenkontext einstellt.

    %Vor%
  4. Fügen Sie diesen Kontextprozessor zu Ihrem TEMPLATE_CONTEXT_PROCESSORS

  5. hinzu
  6. Nun können Sie Ihre Konfigurationsparameter in Vorlagen als {{my_config_key}}

  7. verwenden

Hoffe, das hilft.

    
Husain Basrawala 25.03.2012, 08:01
quelle
2

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.

    
Danny W. Adair 25.03.2012 09:20
quelle
0

Für Ihre Option 2, hartcodierte ID = 1 ist schrecklich, verwenden Sie get () direkt. So könnten Sie verwenden:

%Vor%

Es gibt auch andere Apps für die Anforderungen, wie Ссылка . Vielleicht möchten Sie überprüfen.

    
okm 25.03.2012 08:33
quelle

Tags und Links