2012-06-27 15 views
9

मेरे पास नए Django 1.3 स्थैतिक फ़ाइल ढांचे के बारे में एक सामान्य प्रश्न है।url रूट पर django staticfiles

मुझे वास्तव में Django 1.3 में पेश की गई नई Django staticfile कार्यक्षमता पसंद है। आम तौर पर, मैंने STATIC_URL = "/ static /" सेट किया है और मेरे टेम्पलेट्स में {{STATIC_URL}} टेम्पलेट टैग दर्ज किया है। यह बहुत अच्छा है कि विकास सर्वर स्वचालित रूप से स्थिर फ़ाइलों को कैसे कार्य करता है और मेरी सभी सामग्री को अपेक्षित के रूप में कार्य किया जाता है।

The {{ STATIC_URL }} would be substituted in the template and might serve up files like this... 
example.com/static/css/master.css 
example.com/static/images/logo.png 
example.com/static/js/site.js 

हालांकि, मैं एक विरासत साइट के साथ काम कर रहा हूं जहां स्थिर मीडिया यूआरएल रूट पर घुड़सवार है। उदाहरण के लिए, स्थिर यूआरएल के लिए पथ कुछ इस तरह दिख सकता है:

example.com/css/master.css 
example.com/images/logo.png 
example.com/js/site.js 

यह "स्थिर" यूआरएल नाम स्थान का उपयोग नहीं करता।

मैं सोच रहा था कि स्थिर स्टेटस्पेस का उपयोग न करने और उपरोक्त यूआरएल की सेवा करने के लिए नई स्थैतिक कार्यक्षमता प्राप्त करने का कोई तरीका नहीं है, लेकिन फिर भी नए स्थैतिक ढांचे के लाभों को बनाए रखें (विकास सर्वर द्वारा प्रदत्त सामूहिक, स्थिर फाइलें, आदि)। मैंने STATIC_URL = "" और STATIC_URL = "/" को सेट करने का प्रयास किया, लेकिन न ही वांछित प्रभाव लग रहा था।

क्या नामस्थान के बिना स्थैतिक फ़ाइलों को सेवा देने के लिए स्थैतिक फ़ाइलों को कॉन्फ़िगर करने का कोई तरीका है? आपके विचार के लिए धन्यवाद।

urls.py

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

urlpatterns = patterns('', 
    # ... the rest of your URLconf goes here ... 
) 

if settings.DEBUG: 
    urlpatterns += static('/css/', document_root='app_root/path/to/css/') 
    urlpatterns += static('/images/', document_root='app_root/path/to/images/') 
    urlpatterns += static('/js/', document_root='app_root/path/to/js/') 

यह डीबग डेव सर्वर के लिए मीडिया के नक्शे होगा:

उत्तर

4

आप मैन्युअल रूप से अतिरिक्त स्थान जो आपके परियोजना के भीतर static निर्देशिका में मौजूद नहीं हैं जोड़ सकते हैं। और जब आप अपना उत्पादन मोड सर्वर चला रहे हैं, तो आप निश्चित रूप से django के माध्यम से अनुरोध भेजने के बजाय इन स्थिर स्थानों को वेब सर्वर से संभालेंगे।

+0

धन्यवाद जेडीआई। टेम्पलेट्स में, क्या मैं अभी भी {{STATIC_ROOT}} या बस इसे/css /,/images /,/js/.... के रूप में छोड़ दूंगा? –

+0

यह अब स्थिर ऐप का हिस्सा नहीं होगा, क्योंकि इसे 'python manage.py collectstatic' के माध्यम से एकत्र नहीं किया जा सकता है। आप बस इस तरह के सादे यूआरएल का उपयोग करेंगे: '/ css/foo.css'। इन्हें व्यक्तिगत स्थानों से स्पष्ट रूप से परोसा जा रहा है। वे django परियोजना अंतरिक्ष के बाहर भी मौजूद हो सकते हैं। – jdi

+0

document_root '/' से शुरू नहीं होना चाहिए, आपको अपने django प्रोजेक्ट की मूल निर्देशिका निर्दिष्ट करना है, उदाहरण के लिए: 'urlpatterns + = static ('/css/', document_root =' app_root/path/to/css/') ' –

2

staticfiles कार्यक्षमता क्यों न रखें और सामग्री को पूरा करने के लिए वेब सर्वर स्तर पर पुनः लिखने का उपयोग करें।

उदाहरण के लिए

:

rewrite /css /static permanent; (for nginx) 

इस अपनी परियोजना निर्देशिका एक बहुत क्लीनर रखने के लिए और भी आसान अपने स्थिर निर्देशिका भविष्य में चारों ओर स्थानांतरित करने, उदाहरण के एक CDN के लिए अपने STATIC_URL को स्थानांतरित करने के लिए के लिए होगा।

1

इस तरह आप दोनों index.html और पर अपने अन्य स्टैटिक फ़ाइलें/Django 1.10 में सेवा करने के लिए अपने urls.py की स्थापना की है (अभी भी अन्य Django विचारों की सेवा करने में सक्षम होने जबकि):

from django.contrib.staticfiles.views import serve 
from django.views.generic import RedirectView 

urlpatterns = [ 

    #/routes to index.html 
    url(r'^$', serve, 
     kwargs={'path': 'index.html'}), 

    # static files (*.css, *.js, *.jpg etc.) served on/
    url(r'^(?!/static/.*)(?P<path>.*\..*)$', 
     RedirectView.as_view(url='/static/%(path)s')), 
] 

this answer देखें जहां मैंने इस तरह के कॉन्फ़िगरेशन का एक और पूर्ण स्पष्टीकरण लिखा - खासकर यदि आप इसे उत्पादन के लिए उपयोग करना चाहते हैं।

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