2011-12-19 27 views
9

Bazı ayarlara gerek duymadan komut satırından bazı bireysel django ayarlarının geçersiz kılınması/tanımlanması için bir yol arıyorum.Django: tek tek ayarların manage.py'ye nasıl iletileceği

Şu an ihtiyacım olan şey, yönetim komutumu her çalıştırdığımda DEBUG ayarını veya günlük düzeyini ayarlamaktır. Ama bir şey ayarlayabilmek güzel olurdu.

+0

Eğer 'piton manage.py runserver' denilen DEBUG her zaman ayarlamak istediğiniz ya da özel komutu var mı' piton manage.py foo' ve DEBUG’u içine koymak istiyor musun? – Kirill

+0

Herhangi bir komut için herhangi bir ayar ayarlamak istiyorum. Bunun gibi: './manage.py --set =" DEBUG = True "runserver'. Belki de en kolay yol, settings.py'de bir komut satırı parametre değerini doğru olarak çalıştırmaktır. Ama kaynak kodunu hiç değiştirmemenin bir yolu olduğunu umuyordum. – raacer

cevap

6

İşte benim çözümüm. Aşağıdaki kodu, ayar dosyanızın altına ekleyin.

# 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 

Sonra sadece herhangi bir yönetim komutuna herhangi bir kod geçmesi:

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

Django, ön işlem komut satırı argümanları için herhangi bir kanca sunmadığından bunun mümkün olduğunu düşünüyorum. Neden ihtiyacın var acaba? – Kirill

+0

Merhaba Kirill. Yorumun için teşekkür ederim. Bundan emin değildim. Ayrıca çözümümden hoşlanmadığım şey, seçenek değerini sakladığım yoldur. Ancak, ithalat arasındaki seçeneği kaydetmenin daha iyi bir yolunu bulamadım. – raacer

+0

Neden buna ihtiyacım var, çünkü bu, geliştirme sürecinde herhangi bir ayarı düzeltmenin hızlı ve kolay bir yolu. Ayarlar dosyasını değiştirmeden ayarlarla oynayabilirim. Ve bazı şeyleri değiştirmeyi unutmayacağından emin olabilirim (bu bazen problem yaratır). Ayrıca üretim için yararlı olabilir. Cron/kereviz/vb. Bireysel görevler için ayar yapmak mümkündür. Şu anda ihtiyacım olan şey, hata ayıklama çıktısı ile benim için bazı yönetim komutlarını çalıştırmak ve ortağım için yalnızca yararlı çıktı ile çalışmak. Böyle bir ihtiyaç için komuta değiştirmem gerektiğini hissetmiyorum. – raacer

2

Komutunuza özel seçenek (ör. Günlük düzeyi) ekleyebilirsiniz. Docs

Örnek: Sen bu sizin settings.py fazla farkında yapabilir

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

Teşekkür ederim Denis. Tabii ki yapabilirim. Ancak bu seçeneği her projedeki her bir komuta eklemek istemiyorum. Daha evrensel bir yöntem arıyorum. – raacer

-1

Mevcut ortam var: Burada

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

farklı veritabanları için bir seçenek olduğunda testi:

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

Teşekkürler. Bu yöntem, geçersiz kılmam gereken sabitler için değişiklikler gerektirir. Tam olarak istediğim gibi değil. – raacer

+0

Python'da sabit olarak bir şey yoktur, herhangi bir değişken yeniden bağlanabilir. İyi şanslar. – gdonald

+2

Bu önemli değil. Ayarlayalım diyelim, sabit değil :) – raacer

İlgili konular