2012-03-31 14 views
5

Django mi sta raccomandando che se uso solo un server (Apache) per servire sia i file dinamici che quelli statici, quindi I should serve static files using django.contrib.staticfiles.Come servire i file statici di amministrazione con django.contrib.staticfiles in Django 1.4 (usando un server Apache)?

Così nel mio settings.py Ho caricato django.contrib.staticfiles alla mia INSTALLED_APPS e django.core.context_processors.static alla mia TEMPLATE_CONTEXT_PROCESSORS.

ho notato nei modelli di amministrazione che i collegamenti ai file statici come questo (da index.html):

{% load i18n admin_static %} 

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

ma guardando il cartellino del modello admin_static, è semplicemente un wrapper per static:

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) 

Quindi ho concluso che poiché ogni file statico di amministrazione è serverd con un prefisso admin/..., il percorso completo (per il mio caso) dovrebbe essere

Così ho impostato il percorso sul mio STATICFILES_DIRS all'interno di settings.py, ma Apache continua a non servire file statici (dopo aver ripristinato il server). Dove ho fatto un errore nella mia logica?

risposta

9

Grazie Daniel Roseman per la spiegazione e dandomi la possibilità di impararlo da solo (e ora non lo dimenticherò!) :-).

Inizialmente ero molto confuso e non sapevo che era necessario prima raccogliere i file statici, poi dire ad Apache di servire esso. Ho pensato semplicemente di usare STATICFILES_DIRS e includere l'app static in settings.py era abbastanza buono.

: ecco come ho fatto (e per favore fatemelo sapere se avrei potuto fare meglio):

In settings.py

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

Sembra Django già sa dove raccogliere i file di amministrazione , non è necessario specificare nulla in STATICFILES_DIRS a meno che non sia necessario servire i propri file personalizzati (cosa che io non conosco e quindi non avevo alcuna esperienza precedente con i file statici in Django).

Quindi a /var/www/localhost/htdocs/mysite/ tipo python manage.py collectstatic -l. Lo -l significa creare un collegamento simbolico a tutti i file statici trovati invece di copiarlo (risparmiando spazio).

Successivamente modificare il file di configurazione di Apache (in genere httpd.conf) e aggiungere le informazioni STATIC_URL.Il mio file di configurazione solo per Django si presenta così:

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> 

Quindi riavviare Apache e fatto!

+0

Conciso, profondo e completo, grazie) –

3

La documentazione a cui si effettua il collegamento non dice nulla su con i file con l'app staticfiles. Non è quello che serve: è per la raccolta di file statici in un unico posto per consentire loro di essere facilmente serviti da Apache. (Si occupa di servire i file in fase di sviluppo, ma non è quello di cui stiamo parlando.)

È ancora necessario impostare Apache per servire i file dalla posizione pertinente tramite statico/prefisso.

+0

Ho già installato Apache per distribuire Django con 'mod_wsgi' e usando' wsgi.py' incluso in Django 1.4. Ho seguito il [suggerimento della documentazione] (https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/). – hobbes3

+0

Quindi? Hai ancora bisogno di configurarlo per servire i tuoi file statici, come spiegato più avanti in quella pagina. –

+0

Allora sono confuso. Devo andare a '/ var/www/localhost/htdocs /' e creare un collegamento simbolico 'static' a'/usr/lib64/python2.7/site-packages/django/contrib/admin/static' o qualcosa del genere ? – hobbes3

Problemi correlati