Apa perbedaan antara `dari pengaturan impor django.conf` dan` pengaturan impor` dalam proyek Django

92

Saya membaca bahwa kebanyakan orang melakukannya from django.conf import settingstetapi saya tidak memahami perbedaannya dengan hanya melakukan import settingsdalam file proyek django. Adakah yang bisa menjelaskan perbedaannya?

tzenderman.dll
sumber
Pengaturan django.conf adalah pengaturan default django atau "global" yang dapat Anda timpa dengan pengaturan berbasis proyek Anda sendiri.
Jingo
7
JANGAN PERNAH menggunakan formulir kedua. Yang pertama adalah satu-satunya yang benar.
bruno desthuilliers
2
Tetapi mengapa tidak pernah menggunakan yang kedua?
tzenderman
1
kemungkinan duplikat Berkas Pengaturan Pengimporan Django
Anto

Jawaban:

111

import settingsakan mengimpor modul python pertama bernama settings.pyditemukan di sys.path, biasanya (dalam pengaturan django default). Ini memungkinkan akses hanya ke file pengaturan yang ditentukan situs Anda, yang menimpa pengaturan default django ( django.conf.global_settings).

Jadi, jika Anda mencoba mengakses pengaturan django yang valid tidak ditentukan dalam file pengaturan Anda, Anda akan mendapatkan kesalahan.

django.conf.settingsbukanlah sebuah file tetapi sebuah kelas yang membuat abstraksi dari konsep, pengaturan default dan pengaturan khusus situs Anda. Django juga melakukan pemeriksaan lain saat anda menggunakan from django.conf import settings.

Anda juga dapat menemukannya di dokumen django .

Semoga ini membantu.

juliocesar.dll
sumber
5
import settingsakan mengimpor modul python pertama bernama settings.pyditemukan di sys.path. Ini mungkin bukan "file pengaturan yang ditentukan situs", yang dicari di variabel lingkungan "DJANGO_SETTINGS_MODULE" dan dapat berupa sembarang paket atau modul python.
bruno desthuilliers
@brunodesthuilliers terima kasih. Saya memperbarui jawaban saya dengan memperhatikan koreksi Anda.
juliocesar
22

from django.conf import settings adalah pilihan yang lebih baik.

Saya menggunakan file pengaturan yang berbeda untuk proyek django yang sama (satu untuk "live", satu untuk "dev"), yang pertama akan memilih yang sedang dijalankan.

mansuetus
sumber