2011-12-19 13 views
9

पर व्यक्तिगत सेटिंग कैसे पास करें I अतिरिक्त सेटिंग्स फ़ाइलों के बिना कमांड लाइन से कुछ व्यक्तिगत django सेटिंग को ओवरराइड/परिभाषित करने का तरीका ढूंढ रहे हैं।Django: manage.py

मुझे अभी आवश्यकता है कि जब मैं अपना प्रबंधन कमांड चलाता हूं तो हर बार DEBUG सेटिंग या लॉगिंग स्तर सेट करना है। लेकिन कुछ भी सेट करने में सक्षम होना अच्छा होगा।

+0

आप डीबग हर बार स्थापित करने के लिए 'अजगर manage.py runserver' बुलाया चाहते हैं या आप अपने कस्टम आदेश है' अजगर manage.py foo' और आप इसके अंदर DEBUG सेट करना चाहते हैं? – Kirill

+0

मैं किसी भी कमांड के लिए कोई सेटिंग सेट करना चाहता हूं। इस तरह: './manage.py --set =" DEBUG = True "रनरवर'। हो सकता है कि सबसे आसान तरीका सेटिंग.py में कमांड लाइन पैरामीटर मान निष्पादित करना है। लेकिन मैं उम्मीद कर रहा था कि स्रोत कोड को संशोधित करने का कोई तरीका नहीं है। – raacer

उत्तर

6

मेरा समाधान यहाँ है। नीचे अपनी कोड फ़ाइल के नीचे कोड जोड़ें।

# Process --set command line option 
import sys 
# This module can be imported several times, 
# check if the option has been retrieved already. 
if not hasattr(sys, 'arg_set'): 
    # Search for the option. 
    args = filter(lambda arg: arg[:6] == '--set=', sys.argv[1:]) 
    if len(args) > 0: 
     expr = args[0][6:] 
     # Remove the option from argument list, because the actual command 
     # knows nothing about it. 
     sys.argv.remove(args[0]) 
    else: 
     # --set is not provided. 
     expr = '' 
    # Save option value for future use. 
    sys.arg_set = expr 
# Execute the option value. 
exec sys.arg_set 

तो बस किसी भी प्रबंधन आदेश के लिए किसी भी कोड पारित:

./manage.py runserver --set="DEBUG=True ; TEMPLATE_DEBUG=True" 
+0

मुझे लगता है कि यह एकमात्र संभव तरीका है क्योंकि Django प्रीप्रोकैसिंग कमांड लाइन तर्कों के लिए कोई हुक नहीं देता है। मुझे आश्चर्य है कि आपको इसकी आवश्यकता क्यों है? – Kirill

+0

हाय किरिल। आपकी टिप्पणी के लिये धन्यवाद। मैं इसके बारे में निश्चित नहीं था। इसके अलावा मुझे अपने समाधान के बारे में क्या पसंद नहीं है, जिस तरह से मैं विकल्प मान संग्रहीत करता हूं। लेकिन मुझे आयात के बीच विकल्प बचाने के लिए एक बेहतर तरीका नहीं मिला है। – raacer

+0

मुझे इसकी आवश्यकता क्यों है क्योंकि विकास प्रक्रिया के दौरान किसी भी सेटिंग को ट्विक करने का यह तेज़ और आसान तरीका है। मैं सेटिंग फ़ाइल को संशोधित किए बिना सेटिंग्स के साथ खेल सकता हूं। और मैं सुनिश्चित कर सकता हूं कि मैं चीजों को वापस बदलने में नहीं भूलूंगा (इससे कभी-कभी समस्या होती है)। यह भी उत्पादन के लिए उपयोगी हो सकता है। क्रॉन/अजवाइन/आदि पर व्यक्तिगत कार्य के लिए सेटिंग्स को ट्विक करना संभव है। अभी मुझे जो चाहिए वह डीबग आउटपुट के साथ मेरे लिए कुछ प्रबंधन कमांड चलाने के लिए है, और मेरे साथी के लिए केवल उपयोगी आउटपुट के साथ। मुझे ऐसा नहीं लगता कि मुझे ऐसी जरूरतों के लिए कमांड बदलना चाहिए। – raacer

2

आप अपने आदेश में कस्टम विकल्प (उदा। लॉग स्तर) जोड़ सकते हैं। Docs

उदाहरण:

from optparse import make_option 

class Command(BaseCommand): 
    option_list = BaseCommand.option_list + (
     make_option('--delete', 
      action='store_true', 
      dest='delete', 
      default=False, 
      help='Delete poll instead of closing it'), 
     ) 
    # ... 
+0

धन्यवाद डेनिस। यकीन है कि मैं कर सकता हूं। लेकिन मैं प्रत्येक प्रोजेक्ट में प्रत्येक कमांड में यह विकल्प नहीं जोड़ना चाहता हूं। मैं कुछ और सार्वभौमिक विधि की तलाश में हूं। – raacer

-1

आप इसके बारे में अपने settings.py अधिक जागरूक कर सकते हैं वर्तमान वातावरण है:

DEBUG = socket.gethostname().find('example.com') == -1 

यहां विभिन्न डेटाबेस के लिए एक विकल्प है जब परीक्षण:

'ENGINE': 'sqlite3' if 'test_coverage' in sys.argv else 'django.db.backends.postgresql_psycopg2', 
+0

धन्यवाद। इस विधि को किसी भी स्थिरता के लिए संशोधनों की आवश्यकता है जिसे मुझे ओवरराइड करने की आवश्यकता है। बिल्कुल वही नहीं जो मैं चाहता हूं। – raacer

+0

पायथन में स्थिरता जैसी कोई चीज नहीं है, किसी भी चर को फिर से बांध दिया जा सकता है। सौभाग्य। – gdonald

+2

यह महत्वपूर्ण नहीं है। चलिए सेटिंग कहते हैं, निरंतर नहीं :) – raacer

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