2012-02-06 13 views
6

मीडिया वर्तमान में मेरी स्थानीय विकास मशीन पर है।Django मेरी मीडिया फ़ाइलों (विकास सर्वर पर) नहीं ढूंढ सकता

मेरे MEDIA_ROOT, MEDIA_URL, ADMIN_MEDIA_PREFIX और नीचे के रूप में निर्दिष्ट कर रहे हैं:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), "media") 
MEDIA_URL = '/media/' 
SITE_URL = 'http://localhost:80' 
ADMIN_MEDIA_PREFIX = '/media/admin/' 

कोई 'व्यवस्थापक' फ़ोल्डर है लेकिन यह है कि एक फर्क मुझे नहीं लगता कि नहीं करना चाहिए। urls.py फ़ाइल में मेरे पास है:

(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), 

मैं मैं क्या यह काम कर पाने के लिए क्या करना चाहिए के रूप में एक नुकसान में हूँ। [मैं django सीखने की कोशिश कर रहा हूं और एक मौजूदा प्रोजेक्ट के साथ काम कर रहा हूं जो सुंदर बालों वाली है]

उत्तर

7

आप पहले और बाद में Django 1.3 स्थैतिक फ़ाइल हैंडलिंग मिश्रण और मिलान कर रहे हैं। मूल रूप से सभी स्थैतिक फ़ाइलों को MEDIA_URL से परोसा जाता था, लेकिन Django 1.3 ने staticfiles contrib पैकेज और संबंधित STATIC_ROOT और STATIC_URL सेटिंग्स प्रस्तुत की। django.views.static.serve नए staticfiles ऐप का उपयोग करता है, जिसे आपने सेट नहीं किया है।

मान लें कि आप Django 1.3 चला रहे हैं, सबसे पहले, आपको अपने INSTALLED_APPS पर 'staticfiles' जोड़ना होगा। फिर, आपको STATIC_ROOT और STATIC_URL को परिभाषित करने की आवश्यकता होगी। मानक स्थान "स्थैतिक" नामक प्रोजेक्ट-रूट स्तर निर्देशिका है।

तुम भी StaticFiles टेम्पलेट संदर्भ प्रोसेसर जोड़ने की आवश्यकता होगी:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    'django.core.context_processors.static', 
) 

यह अपने टेम्पलेट में STATIC_URL चर उपलब्ध करायेंगे, आप की तरह {{ STATIC_URL }}css/style.css

सभी कुछ के साथ अपने संसाधनों को संदर्भित कर सकते तो आपके स्थैतिक संसाधनों को "स्थिर" नामक ऐप (ओं) -लेवल निर्देशिका में भी जाना होगा। वास्तविक परियोजना-रूट स्तर "स्थैतिक" निर्देशिका का कभी भी उपयोग नहीं किया जाता है। यह केवल वह जगह है जहां collectstatic प्रबंधन कमांड उत्पादन में उपयोग के लिए आपके सभी स्थिर संसाधनों को डंप करता है।

यदि आप चाहते हैं परियोजना चौड़ा निश्चित संसाधनों (किसी भी एक विशेष अनुप्रयोग से बंधा नहीं), आप एक पूरी तरह से अलग निर्देशिका (जैसे MEDIA_ROOTयाSTATIC_ROOT के रूप में ही नहीं) की आवश्यकता होगी। मैं एक नाम "संपत्ति" का उपयोग करता हूं।

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'), # or whatever you named it 
) 

MEDIA_ROOT/MEDIA_URL अब केवल (जैसे किसी भी फाइल FileField और ImageField रों के माध्यम से बनाए गए उपयोगकर्ता अपलोड करने के लिए उपयोग किया जाता है: आप तो Django बताने के लिए में STATICFILES_DIRS सेटिंग के साथ साथ ही स्थिर संसाधनों के लिए यहाँ देखने के लिए की आवश्यकता होगी है, तो आप अभी भी यह की जरूरत है, लेकिन आप कभी भी मैन्युअल रूप से कुछ भी संग्रहीत नहीं करेगा।

जब आप उत्पादन तक पहुँचते हैं, अपने वेब सर्वर दोनों MEDIA_ROOT और STATIC_ROOTMEDIA_URL पर और STATIC_URL क्रमश: सेवा करने के लिए की आवश्यकता होगी। आप भी करने की आवश्यकता होगी रन:

$ python manage.py collectstatic 

Django को अपनी सभी स्थिर फ़ाइलों को STATIC_ROOT द्वारा निर्दिष्ट निर्देशिका में संकलित करने के लिए।

+0

ऊफ, याद किया जाना चाहिए था मैं 1.3 में काम कर रहा था जब कोड 1.2 से है, तो क्या मेरे पास 1.2 कोड में बहुत अधिक परिवर्तन करने की आवश्यकता नहीं है, जिससे समस्या के बिना उस निर्देशिका का उपयोग करने में सक्षम हो? या मेरे लिए django 1.2 में डाउनगेट करना बेहतर होगा? – StanM

+0

कुछ अन्य सेटिंग्स हैं, जैसे 'डेटाबास 'जो आपको अवमूल्यन चेतावनी दे सकती हैं या अन्यथा Django 1.3 के साथ संगतता के लिए संशोधित करने की आवश्यकता हो सकती है, लेकिन कुल मिलाकर अपेक्षाकृत कुछ अनिवार्य परिवर्तन हैं। व्यक्तिगत रूप से, मैं 1.3 के साथ चिपकने और ऐप को काम करने की सलाह दूंगा। इसे काम करने में संभावित रूप से शामिल मामूली काम स्टैटिकफाइल, कक्षा-आधारित विचार, बेहतर टेम्पलेट टैग इत्यादि जैसी चीजों के लाभ से बहुत अधिक है। इसके अलावा, यह अंततः 1.4 तक पहुंचना आसान बना देगा, जो लगभग एक जरूरी होगा मैंने जो देखा है उससे मुक्त हो जाओ। –

4

विकास सर्वर पर, यह पृष्ठ आपकी सहायता कर सकता है। https://docs.djangoproject.com/en/1.2/howto/static-files/

जोड़ कर अनुवर्ती कोड urls.py रहे हैं:

if settings.DEBUG: 
    urlpatterns += patterns('', 
     (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}), 
    ) 
0

अजगर-Django 1.7 मैं Django 1.8 के साथ

if settings.DEBUG: 
     urlpatterns = patterns('', 
      (r'^$', 'blenderx3d.first_step.views.index'), 
      (r'^media/(?P<path>.*)$','django.contrib.staticfiles.views.serve'),) 
6

काम करता है प्रयोग किया जाता है के साथ - 1.11:

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    # ... the rest of your URLconf goes here ... 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

टिप्पणी Django प्रलेखन कहा गया है कि है कि इस

उत्पादन में इस्तेमाल के लिए उपयुक्त नहीं है

(जाहिर है जब तक आप if settings.DEBUG: हिस्सा का उपयोग करें)

+0

यह यहां https://docs.djangoproject.com/en/1.10/howto/static-files/#serving-files-uploaded-by-a-user-during-development, और कम से कम 1.10 के रूप में प्रलेखित है, आप 'if सेटिंग्स.DEBUG:' बिट की आवश्यकता नहीं है। आप अभी भी डीबग मोड में हैं या नहीं, इस पर आधारित 'MEDIA_URL' और' MEDIA_ROOT' को सशर्त रूप से कॉन्फ़िगर करने की आवश्यकता होगी। –

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