¿Cuál es la diferencia entre `from django.conf import settings` y` import settings` en un proyecto de Django?

92

Estoy leyendo que la mayoría de la gente lo hace, from django.conf import settingspero no entiendo la diferencia con simplemente hacerlo import settingsen un archivo de proyecto de django. ¿Alguien puede explicar la diferencia?

tzenderman
fuente
Las configuraciones de django.conf son configuraciones predeterminadas o "globales" de django que puede anular con las configuraciones de su propio proyecto.
Jingo
7
NUNCA use la segunda forma. El primero es el único correcto.
bruno desthuilliers
2
Pero, ¿por qué no usar nunca el segundo?
tzenderman
1
posible duplicado del archivo de configuración de importación
Anto

Respuestas:

111

import settingsimportará el primer módulo de Python llamado que se settings.pyencuentra en sys.path, generalmente (en las configuraciones predeterminadas de Django). Permite el acceso solo al archivo de configuración definido por su sitio, que sobrescribe la configuración predeterminada de django ( django.conf.global_settings).

Por lo tanto, si intenta acceder a una configuración válida de django no especificada en su archivo de configuración, obtendrá un error.

django.conf.settingsno es un archivo, sino una clase que hace una abstracción de los conceptos, la configuración predeterminada y la configuración específica de su sitio. Django también realiza otras comprobaciones cuando usa from django.conf import settings.

También puede encontrarlo en la documentación de django .

Espero que esto ayude.

julio Cesar
fuente
5
import settingsimportará el primer módulo de Python llamado que se settings.pyencuentra en sys.path. Puede que este no sea el "archivo de configuración definido por el sitio", que se busca en la variable de entorno "DJANGO_SETTINGS_MODULE" y puede ser cualquier paquete o módulo de Python.
bruno desthuilliers
@brunodesthuilliers te agradece. Actualizo mi respuesta tomando en cuenta su corrección.
juliocesar
22

from django.conf import settings es mejor opción.

Utilizo diferentes archivos de configuración para el mismo proyecto de django (uno para "live", uno para "dev"), el primero seleccionará el que se está ejecutando.

mansuetus
fuente