2011-09-03 13 views
12

क्या settings.py फ़ाइल में एक एकल चर को ओवरराइड करने के लिए Django के runserver को बताने का कोई आसान तरीका है?डीजेगो: ओवरराइड डीबग = manage.py runerver कमांड से सही

मैं फोन करने के लिए सक्षम होने के लिए प्यार होता है:

python manage.py runserver 0.0.0.0:8000 Debug=False 

किसी भी विचार?

उद्देश्य: एक विशेष साइट है जहां किसी विशेष पृष्ठ को दिखाने या सहेजने के लिए सैकड़ों डेटाबेस प्रश्न हैं, मैं अपनी सेटिंग्स फ़ाइल को संपादित किए बिना जल्दी से डीबग बंद करने में सक्षम होना चाहता हूं (जिसमें संभावना है भुलाया जा रहा है)।

उत्तर

15

मुझे लगता है कि आपके पास दो विकल्प

है सरल शायद एक कस्टम सेटिंग्स ओवरराइड है, कुछ की तरह:

# no_debug_settings.py 

# pull in the normal settings 
from settings import * 

# no debug for us 
DEBUG = False 

अब, जब आप डिबगिंग के बिना शुरू करना चाहते हैं, तो आप को चलाने चाहते हैं:

python manage.py runserver --settings=no_debug_settings 0.0.0.0:8000 

वैकल्पिक रूप से, आप बस अपनी manage.py फ़ाइल को अनुकूलित कर सकते हैं। वह आयात करता है, और इसे execute_manager पर भेजता है। यदि आपने आयात और कॉल के बीच कुछ कोड जोड़ा है, तो आप इसे अतिरिक्त तर्कों की जांच कर सकते हैं और आवश्यकतानुसार सेटिंग बदल सकते हैं। यह थोड़ी अधिक समझदार है और तोड़ने/भूलने के लिए प्रवण है, इसलिए मैं सुझाव दूंगा कि ओवरराइड सेटिंग्स रैपर शायद जाने का आपका सबसे अच्छा तरीका है।

+0

जो कि एक ही आदेश के लिए पर्याप्त है, धन्यवाद! – Ted

+1

'DJANGO_SETTINGS_MODULE' env var का उपयोग किसी विशेष सेटिंग फ़ाइल पर किसी वातावरण को निर्देशित करने के लिए किया जा सकता है। – ThorSummoner

5

मैं एक सशर्त ब्लॉक के साथ मेरी settings.py फ़ाइल संपादित, इस तरह:

import os # If needed. 

if os.environ.get('DJANGO_DEBUG'): 
    print("Debug is enabled.") 
    DEBUG = True 
    # When not specified, ALLOW_HOSTS defaults to: 
    # ALLOWED_HOSTS = ['localhost', '127.0.0.1', '[::1]'] 
else: 
    DEBUG = False 
    ALLOWED_HOSTS = ["*"] 

फिर, पर्यावरण चर DJANGO_DEBUG=1 पास करके अपने सर्वर चलाते हैं।

DJANGO_DEBUG=1 python -Wall manage.py runserver 

न आना है कि पर्यावरण चर जब डिबग निष्क्रिय करने के लिए (क्योंकि यह किसी भी मूल्य के लिए सेटिंग, 0 सहित अभी भी यह अजगर को सच कर देगा manage.py बुला: आप इतने लंबे समय के रूप में आप संगत कर रहे हैं चर कुछ भी आप चाहते हैं नाम कर सकते हैं कोड)

अद्यतन:। एक टिप्पणीकार ने कहा कि ALLOWED_HOSTS निर्देश जब DEBUGTrue है नजरअंदाज कर दिया है। यह Django के पुराने संस्करणों में केवल सच है। वर्तमान व्यवहार ALLOWED_HOSTS का सम्मान करना है या स्थानीयहोस्ट पते पर डिफ़ॉल्ट है यदि यह निर्दिष्ट नहीं है कि DEBUG सक्षम है। मेरा जवाब इसे मामूली सुधार के रूप में प्रतिबिंबित करने के लिए अपडेट किया गया है।

यह Django documentation से ली जाती है:

जब डीबग यह सच है और ALLOWED_HOSTS खाली है, मेजबान [ 'स्थानीय होस्ट', '127.0.0.1' के खिलाफ मान्य है, '[:: 1]' ]

इसके अतिरिक्त, यह कहा गया है कि व्यवहार पर अब कुछ प्रमुख संस्करण लाइनों में पुरानी है अपनी टिप्पणी:

पुराने संस्करणों में, ALLOWED_HOST डीबीयूजी = सही अगर एस की जांच नहीं की गई थी। यह DNS रिबाइंडिंग हमले को रोकने के लिए Django 1.10.3, 1.9.11, और 1.8.16 में भी बदला गया था।

+0

'DEOWUG' चालू होने पर' ALLOWED_HOSTS' को अनदेखा किया जाता है। यदि आप केवल स्थानीयहोस्ट से पहुंच देना चाहते हैं, तो इसे नियंत्रित करने का सबसे आसान तरीका यह निर्धारित करना है कि यह 'रनरवर' कमांड लाइन के साथ किस इंटरफ़ेस से जुड़ा हुआ है। – rescdsk

+1

केवल Django के * पुराने * संस्करणों में। कृपया मेरा अद्यतन उत्तर देखें। – DamnedFacts

संबंधित मुद्दे