2012-03-31 7 views
5

Django मुझे सिफारिश कर रहा है कि अगर मैं केवल एक सर्वर (अपाचे) का उपयोग गतिशील और स्थैतिक फ़ाइलों दोनों की सेवा के लिए करता हूं, तो I should serve static files using django.contrib.staticfilesDjango 1.4 में django.contrib.staticfiles के साथ व्यवस्थापक स्थैतिक फ़ाइलों को कैसे सेवा दें (एक अपाचे सर्वर का उपयोग करके)?

तो मेरी settings.py में मैं django.contrib.staticfiles मेरी INSTALLED_APPS और django.core.context_processors.static करने के लिए अपने TEMPLATE_CONTEXT_PROCESSORS को लोड किया है।

मैं व्यवस्थापक टेम्पलेट्स है कि यह (index.html से) इस तरह स्थिर फ़ाइलों के लिए लिंक में देखा:

from django.conf import settings 
from django.template import Library 

register = Library() 

if 'django.contrib.staticfiles' in settings.INSTALLED_APPS: 
    from django.contrib.staticfiles.templatetags.staticfiles import static 
else: 
    from django.templatetags.static import static 

static = register.simple_tag(static) 
:

{% load i18n admin_static %} 

{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %} 

लेकिन टेम्पलेट टैग admin_static को देख, यह बस static के लिए एक आवरण है

इसलिए मैंने निष्कर्ष निकाला कि प्रत्येक व्यवस्थापक स्थैतिक फ़ाइल admin/... उपसर्ग के साथ सर्वर है, तो पूर्ण पथ (मेरे मामले के लिए)

होना चाहिए
/usr/lib64/python2.7/site-packages/django/contrib/admin/static 

तो मैंने STATICFILES_DIRS परके अंदर अपना रास्ता सेट किया है, लेकिन अपाचे अभी भी किसी भी स्थिर फाइल (सर्वर को पुनरारंभ करने के बाद) की सेवा नहीं करेगा। मैंने अपने तर्क में गलती कहाँ की?

उत्तर

9

धन्यवाद डैनियल रोज़मन स्पष्टीकरण के लिए और मुझे इसे अपने आप सीखने का मौका दे रहा है (और अब मैं नहीं भूलूंगा!) :-)।

शुरू में मैं वास्तव में उलझन में था और मैं स्टैटिक फ़ाइलें एकत्रित करते हैं, तो अपाचे बता यह सेवा करने के लिए नहीं पता था आप पहली बार किया था। मैंने सोचा कि STATICFILES_DIRS का उपयोग करना औरमें static ऐप समेत पर्याप्त था।

तो यहाँ (और कृपया मुझे बताएँ कि क्या मैं इसे बेहतर किया जा सकता है) मैं इसे कैसे किया है:

settings.py में

STATIC_ROOT = '/var/www/localhost/htdocs/mysite/static/' 
STATIC_URL = '/static/' # default 

यह Django पहले से ही पता लगता है जहां व्यवस्थापक फ़ाइलों को इकट्ठा करने की , आपको STATICFILES_DIRS में कुछ भी निर्दिष्ट करने की आवश्यकता नहीं है जब तक कि आपको अपनी खुद की कस्टम फाइलों की सेवा करने की आवश्यकता न हो (जो मैं नहीं करता और इस प्रकार मुझे Django में स्थिर फ़ाइलों के साथ कोई पूर्व अनुभव नहीं था)।

फिर /var/www/localhost/htdocs/mysite/ टाइप python manage.py collectstatic -l पर। -l का अर्थ यह है कि इसे कॉपी करने की बजाय सभी पाए गए स्थिर फाइलों के लिए प्रतीकात्मक लिंक बनाना (कुछ जगह बचाता है)।

अगला अपाचे कॉन्फ़िगरेशन फ़ाइल (आमतौर पर httpd.conf) संपादित करें और STATIC_URL जानकारी जोड़ें।Django के लिए मेरी कॉन्फ़िगरेशन फ़ाइल इस तरह दिखती है:

Alias /static/ /var/www/localhost/htdocs/mysite/static/ 
#In the form of... 
#Alias STATIC_URL STATIC_ROOT 

<Directory /var/www/localhost/htdocs/mysite/static> 
    Order deny,allow 
    Allow from all 
</Directory> 

WSGIScriptAlias//var/www/localhost/htdocs/mysite/mysite/wsgi.py 
WSGIPythonPath /var/www/localhost/htdocs/mysite 

<Directory /var/www/localhost/htdocs/mysite/mysite> 
    <Files wsgi.py> 
     Order deny,allow 
     Allow from all 
    </Files> 
</Directory> 

फिर अपाचे को पुनरारंभ करें और किया गया!

+0

संक्षिप्त, गहरी और व्यापक, धन्यवाद) –

3

आपके द्वारा लिंक किए गए दस्तावेज़ पर कुछ भी नहीं कहते हैं staticfiles ऐप के साथ फाइलें। यह इसके लिए नहीं है: यह एक ही स्थान पर staticfiles एकत्र करने के लिए है ताकि उन्हें अपाचे द्वारा आसानी से सेवा दी जा सके। (यह विकास में फाइलों की सेवा करने से निपटता है, लेकिन यह नहीं है कि हम यहां किस बारे में बात कर रहे हैं।)

आपको स्थिर/उपसर्ग के माध्यम से प्रासंगिक स्थान से फ़ाइलों की सेवा करने के लिए अभी भी अपाचे सेट अप करने की आवश्यकता है।

+0

मैंने अपाचे को पहले से ही डीजेगो को 'mod_wsgi' के साथ तैनात करने और Django 1.4 में शामिल' wsgi.py' का उपयोग करके सेट अप किया है। मैंने [दस्तावेज़ीकरण के सुझाव] का पालन किया [https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/)। – hobbes3

+0

तो? आपको अभी भी अपनी स्थिर फाइलों को पूरा करने के लिए इसे सेट अप करने की आवश्यकता है, जैसा कि उस पृष्ठ को आगे बताया गया है। –

+0

फिर मैं उलझन में हूं। क्या मुझे '/ var/www/localhost/htdocs /' पर जाना है और '/ usr/lib64/python2.7/साइट-पैकेज/django/contrib/admin/static' या कुछ के लिए 'स्थिर' प्रतीकात्मक लिंक बनाना है ? – hobbes3

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