Làm cách nào để tham chiếu biến cài đặt Django trong các model.py?


124

Đây là một câu hỏi rất mới bắt đầu. Nhưng tôi bối rối. Làm cách nào để tham chiếu biến cài đặt Django trong model.py?

NameError: name 'PRIVATE_DIR' is not defined

Cũng đã thử rất nhiều thứ khác bao gồm settings.PRIVATE_DIR

settings.py:

PRIVATE_DIR = '/home/me/django_projects/myproject/storage_dir'

models.py:

# Problem is here.
from django.core.files.storage import FileSystemStorage

fs = FileSystemStorage(location=PRIVATE_DIR)

class Customer(models.Model): 
    lastName = models.CharField(max_length=20) 
    firstName = models.CharField(max_length=20) 
    image = models.ImageField(storage=fs, upload_to='photos', blank=True, null=True)

Cách chính xác để làm điều này là gì?


7
from django.conf import settings- docs.djangoproject.com/en/dev/topics/settings/…
wkl

Câu trả lời:


275

Hãy thử với điều này: from django.conf import settingssau đó settings.VARIABLEđể truy cập biến đó.


16
Một cái gì đó có liên quan: nếu bạn có một số trường hợp settings_something.pydo một dự án được triển khai trong một số môi trường, đừng cố nhập từ đó app.settings. Các biến bị ghi đè trong các tệp khác sẽ không có hiệu lực. Luôn sử dụng nhập được đề cập trong câu trả lời này. Tôi mất vài giờ để nhận ra điều gì đang diễn ra trong dự án của mình.
Ev.

1
Điều này hoạt động nếu nó được định cấu hình đúng cách: với biến môi trường DJANGO_SETTINGS_MODULE hoặc với tham số dòng lệnh management.py --settings = .. Đọc thêm trong docs: docs.djangoproject.com/en/2.0/topics/settings
mirek

VAR nên vốn sau nếu không nó sẽ không hoạt động
Saurabh Chandra Patel

91
from django.conf import settings

PRIVATE_DIR = getattr(settings, "PRIVATE_DIR", None)

Khi nó cho biết None, bạn sẽ đặt một giá trị mặc định trong trường hợp biến không được xác định trong cài đặt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.