2014-07-24 16 views
24

Đây là ví dụ về những gì tôi đang cố gắng đạt được. Hiệu ứng mong muốn là một tính năng cụ thể sẽ có hiệu lực nếu và chỉ khi cài đặt có liên quan của nó tồn tại được xác định. Nếu không, tính năng này sẽ bị tắt.Django: Kiểm tra xem biến cài đặt có được đặt là

settings.py:

SOME_VARIABLE = 'some-string' 
ANOTHER_VARIABLE = 'another-string'

random_code_file.py:

from django.conf import settings 

if settings.is_defined('ANOTHER_VARIABLE'): # <- I need this. 
    do_something(settings.ANOTHER_VARIABLE) 
else: 
    do_something_completely_different() 

Trong đoạn mã trên, tôi là thiếu bất cứ điều gì tôi nên làm thay vì settings.is_defined.

Nếu đây là phương pháp tiếp cận sai cho vấn đề hoàn toàn, tôi cũng rất vui khi được nghe về các phương pháp thay thế khác. Hiệu ứng mong muốn là tính năng tự động kích hoạt chỉ có hiệu lực nếu cài đặt có liên quan tồn tại. Tôi muốn tránh một số cài đặt đặc biệt settings.ACTIVE_FEATURES hoặc một giá trị đặc biệt chẳng hạn như chuỗi trống hoặc Không có đối tượng địa lý để đánh giá xem nó có hiệu lực hay không.

Điều cuối cùng tôi muốn làm là sử dụng try/except. Tôi muốn đi cho một giá trị sản phẩm nào cho thấy loại trừ các tính năng. - Nhưng nếu thử/ngoại trừ nó thực sự là phương pháp ưa thích, tôi sẽ đánh dấu câu trả lời là chính xác nếu nguồn đầy đủ hoặc giải thích được cung cấp. Trong thực tế là đi cho bất kỳ câu trả lời.

Vì vậy, trong ngắn hạn, tôi cần một cách thích hợp để kiểm tra xem biến cài đặt có được xác định trong Django hay không.

Cảm ơn trước!

+2

Tại sao điều này dành riêng cho Django? Tôi tin rằng có một phương pháp Python tích hợp cho phép bạn thực hiện điều này – nmagerko

+0

Tôi giả định rằng đối tượng 'cài đặt' là duy nhất đối với Django. Tôi không cho rằng bạn có thể đào tạo tôi về cách làm điều này trong Python nói chung? :) – Teekin

Trả lời

43

Dường như bạn đã thực hiện đúng cách: mô-đun cài đặt nhập và kiểm tra.

Và bạn có thể cố gắng sử dụng:

if hasattr(settings, 'ANOTHER_VARIABLE'):

thay vì:

if settings.is_defined('ANOTHER_VARIABLE'):

tôi thấy the documentation, hy vọng điều này có thể giúp đỡ.

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