2012-03-25 23 views
8

Moja strona ma kilka konfiguracji globalnych. Na przykład „adres serwera SMTP”, „Spółka”, adres itpKonfiguracja strony w django-admin

Oczywiście mogę:

  1. Stwórz listę zmiennych w settings.py i wykorzystać go w szablonach i aplikacji;
  2. Utwórz model (np. Configuration) i wpisz tam wszystkie potrzebne pola.

Jeśli użyję pierwszej metody, nie mogę dać dostępu do zmiany tych pól w django-admin.

Jeśli użyję metody sekundowej, nie jest to piękne rozwiązanie, ponieważ wszędzie w kodzie będę używał model_name.objects.get(id=1) i potrzebuję tylko jednego wystąpienia. Modele zostały utworzone dla innych zadań.

Jak mogę rozwiązać ten problem?

+1

W przyszłości sprawdź podgląd podglądu na żywo swojego posta, aby upewnić się, że formatowanie będzie w przybliżeniu poprawne. –

+0

Korzystanie z [django-solo] (http://stackoverflow.com/a/20813571/1888983) ([github] (https: // github.com/lazybird/django-solo)) stworzenie singletonu było dla mnie dość bezbolesne. – jozxyqk

Odpowiedz

6

Oto, co zrobiłem. Być może nie jest to najbardziej optymalne rozwiązanie, ale działa dla mnie.

  1. Utwórz model konfiguracji i wykonywać wszystkie zwykłe rzeczy jak w punkcie 2. Utwórz funkcję (powiedzmy w configuration.view), która będzie ciągnąć się i zwracają wartości konfiguracyjnych w dict.

  2. teraz w Twoich settings.py zaimportować swoją funkcję i ustawić zwrócony dict do zmiennej settings.py: CONFIG = configuration.view.get_config()

  3. Tworzenie procesor kontekstowe szablon, który będzie ustawiony ten CONFIG dict w kontekście szablonu.

    def init_site_settings(request): 
        return settings.CONFIG 
    
  4. Dodaj ten procesor kontekstowe do listy TEMPLATE_CONTEXT_PROCESSORS

  5. Teraz jesteś wolny, aby korzystać z parametrów konfiguracyjnych w szablonach jako {{my_config_key}}

nadzieję, że to pomaga.

0

Dla twojej opcji 2, zakodowany identyfikator id = 1 jest okropny, użyj get() bezpośrednio. W ten sposób można użyć:

get_conf = lambda: model_name.objects.get() 

Ponadto istnieją inne aplikacje dla wymogów, takich jak http://bitbucket.org/bkroeze/django-livesettings/. Możesz chcieć sprawdzić.