2013-02-24 8 views
43

मैंने थोड़ी देर पहले कमांड लाइन से चलाने के लिए एक-ऑफ पायथन स्क्रिप्ट लिखने के लिए setup_environ() का उपयोग किया जो वास्तव में कस्टम manage.py कमांड (मेरी पसंदीदा पसंद) के रूप में बिल्कुल ठीक नहीं था। यह सब कुछ अच्छी तरह से स्थापित किया। मुझे लगता है कि हमने इस समारोह को हटा दिया क्योंकि गैर-डीजेंगो पायथनिस्ट इस तरह की जादुई चीजों के लिए djangonauts का मजाक उड़ाते हैं और हम गंदे महसूस करने से थक गए हैं। तो अगर इसे बहिष्कृत किया गया, तो विकल्प क्या है? शायद यह एक आलसी सवाल है, लेकिन मुझे एक ही प्रभाव को प्राप्त करने के लिए setup_environ के स्थान पर चलाने की क्या ज़रूरत है? मुझे लगता है कि मैं फ़ंक्शन को मेरी स्क्रिप्ट में कॉपी/पेस्ट कर सकता हूं लेकिन मुझे लगता है कि इसे बहिष्कृत करने का मुद्दा नहीं था। (जाहिर है, मैं अभी भी एक बहिष्कृत फ़ंक्शन का उपयोग कर सकता हूं, लेकिन मैं चाहता हूं कि मेरी स्क्रिप्ट django के कुछ संस्करणों से बचें)एक-ऑफ django स्क्रिप्ट के लिए बहिष्कृत setup_environ() के लिए वैकल्पिक?

उत्तर

55

इस में Django 1.7

import os 
import django 
from myapp import models 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") 
django.setup() 

print models.MyModel.objects.get(pk=1) 
+1

यह मेरे लिए 1.7.3 django.setup() विशेषताएँ त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'सेटअप' – Harry

+0

यह सुनिश्चित करने के लिए दो बार जांचें कि आप चीजों को सही तरीके से आयात कर रहे हैं (और सुनिश्चित करें कि आपका पथ सही है) । सेटअप फ़ंक्शन 1.7.3 में होना चाहिए: https://github.com/django/django/blob/1.7.3/django/__init__.py –

+1

django.setup() 1.8 django संस्करण में जोड़ा गया था। यह 1.7 में काम नहीं करेगा। https://docs.djangoproject.com/en/1.8/topics/settings/ – javed

21

Django 1.4 रिलीज नोट्स आधिकारिक तौर पर सेटिंग सेट करने के लिए django.conf.settings.configure() का उपयोग करने की अनुशंसा करते हैं। यह छोटी लिपियों के लिए अच्छा है जिसके लिए आपको "पायथनिक" तरीके से सब कुछ करने की ज़रूरत है। यदि आपके पास एक बड़ी परियोजना है, तो मैं Django दृष्टिकोण का उपयोग करना चाहता हूं जिसमें एक अलग सेटिंग्स मॉड्यूल/पैकेज है और उसके बाद DJANGO_SETTINGS_MODULE पर्यावरण चर में इसका पथ है। यह दृष्टिकोण जो manage.py में इस्तेमाल किया जाता है:

# manage.py 

# ... 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings") 
# ... 

रिलीज डॉक्स here पाया जा सकता है।

+2

Django 1.6 का उपयोग करके, 'manage.py' में अब सुझाई गई रेखा है:' os.en वातावरण.setdefault ("DJANGO_SETTINGS_MODULE", "myproject.settings") 'और फिर भी जब मैं एक खोल लॉन्च करने का प्रयास करता हूं तो यह अभी भी फेंकता है मूल प्रश्न के समान त्रुटि। –

28

miki725 के जवाब पर विस्तार करने के लिए, अगर इससे पहले कि आप

from django.core.management import setup_environ 

import fooproject.settings as settings 
setup_environ(settings) 

सिर्फ

import os 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fooproject.settings") 
from django.conf import settings 

के साथ बदलें और अपनी सेटिंग्स सेटिंग्स के रूप में लोड होगा था।

Django 1.7+ के लिए, बेन डेविस से समाधान देखें।

+1

यह django 1.6 के साथ मेरे लिए काम नहीं करता है - मैंने sys.path को प्रोजेक्ट पथ (ऐप नहीं) जोड़ा है, मैंने django.conf से सेटिंग्स आयात किए हैं, फिर django.conf से सेटिंग्स को जोड़ा है, लेकिन यदि मैं कोशिश करता हूं और फिर कोशिश करता हूं, मेरे डेटाबेस मॉडल में से एक आयात करें (shoppinglist.models से शॉपिंगलिस्ट आयात करें) यह एक त्रुटि देता है "मॉडल नामित मॉड्यूल नहीं"। वही आयात लाइन manage.py के माध्यम से लॉन्च किए गए खोल के भीतर से काम करती है। कोई विचार? – frankster

+0

यदि आप मॉडल आयात नहीं कर सकते हैं, तो ऐसा लगता है जैसे आपके पथ मान सही तरीके से सेट नहीं किए गए हैं, जो सेटिंग्स के संबंध में इस प्रश्न के दायरे से बाहर है। आपको अपने पथ डीबग करने के लिए "manage.py shell" के साथ लॉन्च किए गए django खोल के बजाय "पायथन" के साथ लॉन्च किए गए नियमित पायथन खोल में परीक्षण करने का प्रयास करना चाहिए। –

1

Disclaimer: I'm using Django 1.8

बस मेरे 2 सेंट जोड़ने बदल गया है: मैं इस पेज में प्रस्तुत समाधान के कुछ करने की कोशिश की है, लेकिन वे सब पर काम किया नहीं समझे। मैं बस एक समाधान के साथ आया कि मैं नीचे साझा कर रहा हूँ।

सुनिश्चित करें कि आप अपनी परियोजना के रूट फ़ोल्डर में हैं। वही जहां manage.py स्थित है।

#make sure basic imports are in place 
>>> import os,django 

#set the specific django settings file 
>>> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "main.settings.base") 

# import your modules and use them just like you do in your 
# web apps 
>>> from apps.customers import models as c 

# normal usage... for instance: 
>>> dir(c) 
['You', 'Will', 'See', 'Your', 'Models', ... ] 
+0

यदि मैं रूट में नहीं हूं तो मुझे क्या करना चाहिए? – Alexis

2

क्या Leandro एन कहा करने के लिए जोड़ने के लिए (, धन्यवाद Leandro!), आप django.setup जोड़ने के लिए (है)।

उदाहरण के लिए, मेरी कोड:

import os, django 
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') 
django.setup() 
from app.models import ModelA, ModelB 

FYI करें, मैं Django 1.10 पर हूँ।

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