2012-03-25 12 views
8

Mi sitio tiene pocas configuraciones globales. Por ejemplo "dirección SMTP del servidor", "dirección de la empresa", etc.Configuración del sitio en django-admin

Por supuesto que puedo:

  1. Crear una variables settings.py y utilizarlo en las plantillas y aplicaciones;
  2. Crea un modelo (como Configuration) y escribe allí todos los campos necesarios.

Si uso de primera manera no puedo dar acceso para cambiar estos campos en django-admin.

Si uso segundos no es una solución hermosa, porque en todas partes del código usaré model_name.objects.get(id=1) y solo necesito una instancia. Modelos fue creado para otras tareas.

¿Cómo puedo resolver este problema?

+1

En el futuro, compruebe la vista previa en vivo de su publicación para asegurarse de que el formato sea aproximadamente correcto. –

+0

Usando [django-solo] (http://stackoverflow.com/a/20813571/1888983) ([github] (https: // github.com/lazybird/django-solo)) para crear un singleton fue bastante fácil para mí. – jozxyqk

Respuesta

6

Esto es lo que hice. Puede que no sea la solución más óptima, pero funciona para mí.

  1. crear un modelo de configuración y hacer todo lo habitual que en su punto 2. Crear una función (por ejemplo, en configuration.view) que sacar y devolver los valores de configuración en un diccionario.

  2. En su settings.py, importe su función y establecer el dict retorno a una variable settings.py: CONFIG = configuration.view.get_config()

  3. Crear un procesador contexto de la plantilla que se ajuste este CONFIG dict en el contexto de la plantilla.

    def init_site_settings(request): 
        return settings.CONFIG 
    
  4. Añadir este procesador de contexto a su TEMPLATE_CONTEXT_PROCESSORS

  5. Ahora que son libres de utilizar sus parámetros de configuración de las plantillas como {{my_config_key}}

Espero que esto ayude.

0

Para su opción 2, la identificación codificada = 1 es terrible, use get() directamente. Así que puede usar:

get_conf = lambda: model_name.objects.get() 

También existen otras aplicaciones para los requisitos, como http://bitbucket.org/bkroeze/django-livesettings/. Es posible que desee comprobar.

2

Tenga una mirada en http://www.djangopackages.com/grids/g/live-setting/ de mi pregunta similar Changing Django settings at runtime

En cuanto a la id = 1 notación, a) se puede definir un atributo correspondiente en el administrador de https://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods b) sí que es todavía una consulta de base de datos - la caja https://github.com/disqus/django-modeldict/ para un enfoque con acceso diferido y almacenamiento en caché.

Cuestiones relacionadas