2012-03-25 33 views
8

Trang web của tôi có ít cấu hình chung. Ví dụ "địa chỉ smtp-server", "địa chỉ công ty", vvCấu hình trang web trong django-admin

Tất nhiên tôi có thể:

  1. Tạo một biến trong settings.py và sử dụng nó trong các mẫu và ứng dụng;
  2. Tạo mô hình (như Configuration) và viết tất cả các trường cần thiết tại đó.

Nếu tôi sử dụng cách đầu tiên, tôi không thể cấp quyền truy cập để thay đổi trường này trong django-admin.

Nếu tôi sử dụng giây thì đó không phải là giải pháp đẹp, bởi vì ở mọi nơi trong mã tôi sẽ sử dụng model_name.objects.get(id=1) và tôi chỉ cần một ví dụ. Mô hình đã được tạo cho một nhiệm vụ khác.

Làm cách nào để giải quyết vấn đề này?

+1

Trong tương lai, vui lòng kiểm tra bản xem trước trực tiếp bài đăng của bạn để đảm bảo định dạng sẽ chính xác. –

+0

Sử dụng [django-solo] (http://stackoverflow.com/a/20813571/1888983) ([github] (https: // github.com/lazybird/django-solo)) để tạo ra một singleton là khá đau cho tôi. – jozxyqk

Trả lời

6

Đây là những gì tôi đã làm. Có thể không phải là giải pháp tối ưu nhất nhưng hiệu quả đối với tôi.

  1. Tạo một mô hình cấu hình và làm tất cả những thứ bình thường như trong quan điểm của bạn 2. Tạo một hàm (nói trong configuration.view) mà sẽ kéo ra và trả lại giá trị cấu hình trong một dict.

  2. Bây giờ trong settings.py của bạn, nhập chức năng của bạn và thiết lập các dict trở lại một biến settings.py: CONFIG = configuration.view.get_config()

  3. Tạo một bộ xử lý mẫu bối cảnh đó sẽ thiết lập CONFIG dict này trong các mẫu ngữ cảnh.

    def init_site_settings(request): 
        return settings.CONFIG 
    
  4. Thêm xử lý bối cảnh này để bạn TEMPLATE_CONTEXT_PROCESSORS

  5. Bây giờ bạn có thể tự do sử dụng các thông số cấu hình của bạn trong các mẫu như {{my_config_key}}

Hope this helps.

0

Đối với tùy chọn 2 của bạn, id được mã hóa cứng id = 1 là khủng khiếp, hãy sử dụng get() trực tiếp. Vì vậy bạn có thể sử dụng:

get_conf = lambda: model_name.objects.get() 

Cũng có những ứng dụng khác cho các yêu cầu, chẳng hạn như http://bitbucket.org/bkroeze/django-livesettings/. Bạn có thể muốn kiểm tra.

2

Có một cái nhìn tại http://www.djangopackages.com/grids/g/live-setting/ từ câu hỏi tương tự của tôi Changing Django settings at runtime

Về id = 1 ký hiệu, a) bạn có thể định nghĩa một thuộc tính tương ứng trên quản lý của bạn https://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods b) vâng đó là vẫn còn một truy vấn cơ sở dữ liệu - thanh toán https://github.com/disqus/django-modeldict/ cho một cách tiếp cận với truy cập lười biếng và bộ nhớ đệm.

Các vấn đề liên quan