2011-10-01 14 views
5

मैं सब कुछ दस्तावेज के माध्यम से किया गया है, और यह सिर्फ मुझे समझ में नहीं आता है। मैं संग्रहित भाग गया, मैंने अपने ऐप और मेरी प्रोजेक्ट निर्देशिका दोनों में सेट/स्थिर/निर्देशिकाएं स्थापित कीं, मैंने अपनी सेटिंग्स.py फ़ाइल में STATIC_URL और STATIC_ROOT जोड़ा (लेकिन मुझे नहीं पता कि वे कैसे सही तरीके से सेट हैं या नहीं) और {{ STATIC_URL}} अभी भी कुछ भी प्रस्तुत नहीं कर रहा है। यह सब एचटीएमएल को सीएसएस से जोड़ने के लिए बहुत अधिक ओवरकिल की बिल्ली की तरह लगता है।मैं डीजेंगो को विकास में सीएसएस कैसे सेवा करूं?

मुझे लगता है कि मैं विवरण में खो गया हूं; क्या कोई इस स्थिर फाइल विचार के उच्च स्तरीय टूटने की आपूर्ति कर सकता है? मुझे डर है कि मेरे पास उत्पादन और विकास दोनों सेटअप के लिए मिश्रित निर्देश हो सकते हैं।

अधिक: यहाँ मेरी settings.py फ़ाइल से प्रासंगिक सा है:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    # Uncomment the next line to enable the admin: 
    'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
    'django.contrib.staticfiles', 
    'dashboard.base', 
) 

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.contrib.auth.context_processors.auth', 
    'django.contrib.messages.context_processors.messages', 
) 

STATIC_ROOT = '' 
STATIC_URL = '/static/' 


STATICFILES_DIRS = (
    'C:/Users/Sean/Desktop/Work Items/dashboard/base/static/', 
) 

और यह कोड मैं अपने टेम्पलेट में उपयोग करने के लिए कोशिश कर रहा हूँ है:

<link rel="stylesheet" href="{{ STATIC_URL }}css/960.css" /> 

ठीक है। मैंने सभी को सुझाए गए परिवर्तन किए हैं। यहां मेरा नया urls.py:

from django.conf.urls.defaults import * 
from base.views import show_project 
from django.conf import settings 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

# Uncomment the next two lines to enable the admin: 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
# Example: 
# (r'^dashboard/', include('dashboard.foo.urls')), 

# Uncomment the admin/doc line below to enable admin documentation: 
# (r'^admin/doc/', include('django.contrib.admindocs.urls')), 

# Uncomment the next line to enable the admin: 
(r'^admin/', include(admin.site.urls)), 
('^show_project/$', show_project), 
) 

if settings.DEBUG: 
    urlpatterns += patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }), 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True })) 

urlpatterns += staticfiles_urlpatterns() 

क्या मुझे कुछ याद आ रही है? आम तौर पर मेरी समस्याएं वास्तव में कुछ मूलभूत होती हैं जो सीएस पेशेवरों को मंजूरी दे दी जाती है लेकिन मुझे याद आती है।

उत्तर

4

यहां मेरा सेटअप कैसे है। ऐसा लगता है कि आप स्थिर संदर्भ प्रोसेसर खो सकते हैं?

STATIC_ROOT और STATIC_URL

सेटिंग्स में।विकास में इस्तेमाल किया py:

STATIC_ROOT = '' 
STATIC_URL = '/static/' 

और मेरे उत्पादन सर्वर पर इस्तेमाल किया settings.py:

STATIC_URL = '//static.MYDOMAIN.com/' 
STATIC_ROOT = '/home/USER/public_html/static.MYDOMAIN.com/' 

तो, सभी स्थैतिक फ़ाइलें static/ में स्थित हैं। उत्पादन सर्वर पर, static/ में इन सभी फ़ाइलों को /home/USER/public_html/static.MYDOMAIN.com/ पर एकत्र किया जाता है जहां उन्हें एक अलग वेब सर्वर (मेरे मामले में nginx) द्वारा सेवा दी जाती है और Django नहीं। दूसरे शब्दों में, मेरे django अनुप्रयोग (अपाचे पर चल रहा है) कभी भी उत्पादन में स्थैतिक संपत्ति के लिए अनुरोध प्राप्त नहीं करता है।

संदर्भ प्रोसेसर

टेम्पलेट्स के लिए आदेश STATIC_URL चर उन्हें उपलब्ध है, तो आप django.core.context_processors.static संदर्भ प्रोसेसर, भी settings.py में परिभाषित उपयोग करने की आवश्यकता है के लिए:

TEMPLATE_CONTEXT_PROCESSORS = (
    # other context processors.... 
    'django.core.context_processors.static', 
    # other context processors.... 
) 

सर्वर स्थैतिक संपत्ति विकास में

डीजेगो को स्थिर संपत्तियों के लिए अनुरोध नहीं मिलता है प्रोडक्शन, हालांकि, विकास में हम सिर्फ Django को अपनी स्थिर सामग्री की सेवा करते हैं। static/* के लिए अनुरोध करने के लिए Django को बताने के लिए हम staticfiles_urlpatternsurls.py में उपयोग करते हैं।

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
# .... your url patterns are here ... 
urlpatterns += staticfiles_urlpatterns() 
+0

की आवश्यकता है धन्यवाद - मेरे पास प्रोसेसर है - आप इसे उपरोक्त मेरी फ़ाइल में देख सकते हैं। आपकी सेटिंग्स ने मेरी मदद की, हालांकि: मैं अपने STATIC_ROOT और STATIC_URL सेटिंग्स में पूर्ण पथ का उपयोग कर रहा था। मैंने इसे ठीक कर दिया है लेकिन मुझे लगता है कि मुझे अभी भी STATICFILES_DIRS में पूर्ण पथ चाहिए, है ना? – StormShadow

+2

@StormShadow, आप 'os.path.join (os.dirname (__ फ़ाइल __)," स्थिर ") कर सकते हैं, मानते हैं कि आपकी स्थिर फाइलें उसी सेटिंग में हैं जो' settings.py' के समान हैं। – Geo

+0

मुझे लगता है कि यदि आप Django विकास सर्वर या nginx या अपाचे जैसे किसी अन्य सर्वर का उपयोग कर अपनी फ़ाइलों की सेवा कर रहे हैं तो आप इसका उल्लेख नहीं करते हैं।यदि दूसरा मुद्दा आपके प्रोजेक्ट सर्वर की कॉन्फ़िगरेशन से संबंधित हो सकता है न कि आपके प्रोजेक्ट में कॉन्फ़िगरेशन सेटिंग्स के लिए। – kaysa

2

Serving static files in development पर एक नज़र डालें। आपको STATIC_URL और STATICFILES_DIRS को django.contrib.staticfiles को फ़ाइलों को देखने के लिए कहने के लिए परिभाषित करने की आवश्यकता है।

+0

ठीक है। वास्तव में, मैं अभी क्या कर रहा हूं, वास्तव में। लेकिन यह काम नहीं कर रहा है। मैं आगे slashes का उपयोग कर रहा हूँ और सी:/पर पथ शुरू कर रहा हूँ। क्या वह गलत है? – StormShadow

+0

संयोग से, वे दोनों एक ही चीज़ पर सेट हैं क्योंकि मुझे नहीं पता कि वास्तव में {{STATIC_URL}} चर सेट करता है। ऐसा लगता है कि काम नहीं कर रहा है। – StormShadow

+0

वे समान नहीं होना चाहिए। STATICFILES_DIRS आपकी फाइलें वर्तमान में होनी चाहिए, STATIC_ROOT एक अलग फ़ोल्डर होना चाहिए जहां आप अपनी फ़ाइलों को एकत्रित करते समय समाप्त करना चाहते हैं, और STATIC_URL वह पथ होना चाहिए जिसका उपयोग आप अपनी साइट/ऐप –

2

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

तो आप स्थैतिक फाइल ऐप कहां देखते हैं जहां स्थैतिक फाइलों (सेटिंग्स STATICFILES_DIRS द्वारा) को कॉपी करना है, जहां उन्हें कॉपी करना है (STATIC_ROOT) और उन्हें एक्सेस करने का कौन सा पथ (STATIC_URL)। जब आप संग्रहित करते हैं, तो यह निर्देशिकाओं के माध्यम से खोजता है और सभी फाइलों को स्थिर रूट में पाता है।

project/app1/static/css/ # These are css/js for a particular app 
project/app2/static/css/ 
project/app3/static/css/ 
project/static/css # These might be general css/js for the whole project 
static/ # This is where the collectstatic command will copy files to 

और आप उन्हें collectstatic के बाद आप होगा:

इस का लाभ यह है कि आप एक बेहतर छुट्टी पर अपने स्थिर फाइलों का प्रबंधन कर सकते हैं

project/app1/static/css/ 
project/app2/static/css/ 
project/app3/static/css/ 
project/static/css 

static/app1/css/ 
static/app2/css/ 
static/app3/css/ 
static/css/ 

जब आप अपने एप्लिकेशन डाल/एक उत्पादन सर्वर पर साइट, आप वेबसर्वर (अपाचे, nginx) को फाइलों की सेवा करने के साथ फाइलों की सेवा करने के साथ सौदा करते हैं, जो कि मीडिया फ़ाइलों को/स्थिर/या/मीडिया/सीधे पर सेवा के लिए अन्य सभी अनुरोधों को पार करते समय बताते हैं। विकास करते समय, विकास सर्वर को आपके लिए यह करना आसान है।

ऐसा करने के लिए, आपने स्पष्ट रूप से बताया है कि सर्वर के तहत मीडिया/स्टेटिक/(आपका STATIC_URL) के लिए कोई अनुरोध है। अपने urls.py में, निम्नलिखित (या समान)

from django.conf import settings 
... 
if settings.DEBUG: 
    urlpatterns += patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': True }), 
     url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': True })) 
+0

हाँ का उपयोग करते समय अपनी फ़ाइलों तक पहुंचने के लिए करना चाहते हैं यह या तो काम नहीं करता है। यह मुझे "NameError at/show_project/ नाम 'सेटिंग्स' परिभाषित नहीं किया गया है" – StormShadow

+0

आपको सेटिंग्स आयात करने की आवश्यकता है। मैंने अपना जवाब –

+0

संपादित किया है धन्यवाद! लेकिन अभी भी कुछ भी नहीं आ रहा है। मैंने अभी उस कोड को चिपकाया है जो मुझे अभी मिला है। शायद मैं उसमें कुछ भूल गया हूँ? – StormShadow

0

मुझे एक ही समस्या है, और कई उत्तरों की खोज है, लेकिन कोई भी मुझे सही जवाब नहीं देता है। समस्या यह है कि आप RequestContext का उपयोग नहीं करते हैं। आप

c = RequestContext(request, { 
    'foo': 'bar', 
}) 

मेरे विचार में तरह खाका के पैरामीटर के रूप में एक RequestContext करना चाहिए है:

return render_to_response('parts/test2.html', RequestContext(request, locals())) 
संबंधित मुद्दे