2011-12-18 14 views
6

Sono ancora relativamente nuovo a Django e ho appena iniziato a dare un'occhiata a Django-CMS, tuttavia, non riesco a superare la presentazione di base dello official docs.django-cms non instradare correttamente all'url statico?

Il mio problema potrebbe essere correlato a sekizai, ma sembra urls.py.

Fondamentalmente, ho seguito il tutorial quasi esattamente. L'unica differenza è che ho la mia app cms sotto blog /, percorso completo ~/workspace/djangocms/blog /. Ho impostato il STATIC_URL e STATIC_ROOT correttamente in settings.py e lo stesso vale per il mio MEDIA_URL e MEDIA_ROOT.

Espongo il percorso e la directory del supporto perché se imposto il modello di base per il collegamento al css su {{ MEDIA_URL }}css/somecss.min.css funziona correttamente. Tuttavia, facendo lo stesso con STATIC_URL: {{ STATIC_URL }}css/somecss.min.css non funziona e produce 404 s.

Inoltre, da quello che posso dire, il default/statico/percorsi sembrano funzionare bene per altre directory. Il codice prodotto da {% cms_toolbar %} genera ammenda e css da luoghi come /static/cms/css/plugins/cms.toolbar.css vengono serviti correttamente.

Contenuto del urls.py

from django.conf.urls.defaults import *           
from django.contrib import admin 
from django.conf import settings 

admin.autodiscover() 

urlpatterns = patterns('', 
    # Examples: 
    # url(r'^$', 'blog.views.home', name='home'), 
    # url(r'^blog/', include('blog.foo.urls')), 

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

    # Uncomment the next line to enable the admin: 
    # url(r'^admin/', include(admin.site.urls)), 
    (r'^admin/', include(admin.site.urls)), 
    url(r'^', include('cms.urls')), 
) 
if settings.DEBUG: 
    urlpatterns = patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
     {'document_root': settings.MEDIA_ROOT, 
     'show_indexes': True}), 
     url(r'', 
     include('django.contrib.staticfiles.urls')), 
    ) + urlpatterns 

risposta

6

avuto la mia risposta da #django su freenode. Rispondetelo io stesso nel caso qualcuno ne avesse bisogno:

Principalmente per django-cms, STATIC_ROOT viene utilizzato principalmente per risorse dal django-cms stesso durante la produzione. Se django viene eseguito utilizzando il metodo python manage.py runserver, STATIC_ROOT è irrilevante.

From the Django docs: Utilizzare collectstatic per raccogliere tutte le risorse statiche utilizzate (che per django-cms sarà probabilmente in una directory come/usr/local/lib/python ##/dist-packages). Questo mostra quali file STATIC_ROOT userà durante la produzione.

Se si desidera utilizzare altre directory con STATIC_URL, sarà necessario aggiungerle alla sezione STATICFILES_DIRS di settings.py. (Assicurati di leggere i commenti - usa i percorsi assoluti e non i percorsi relativi). Questo in realtà è relativamente ovvio quando si effettua un'app Django pura, tuttavia, poiché volevo seguire rigorosamente il tutorial di Django-cms, non era così ovvio come avrebbe dovuto essere.

8

Sono andato in giro per questo problema dopo aver seguito lo stesso tutorial.

Il mio sito caricava la pagina di benvenuto standard e potevo creare pagine CMS. Tuttavia, quando ho provato a caricare file statici nei miei modelli ho continuato a ricevere 404 errori.

La risposta fornita dall'OP mi ha aiutato molto.

Giusto per essere chiari, questo ha funzionato per me:

  1. rinominare la directory statica nel progetto per qualcosa come local_static

  2. Aggiungere la seguente alle impostazioni.py

PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))

STATICFILES_DIRS = ( os.path.join(PROJECT_PATH, "local_static/"), )

Questo ha funzionato per me. Ora posso smettere di strapparmi i capelli

0

Ho postato la stessa risposta here, ma ho riscontrato gli stessi problemi. Mentre ero in grado di servire file statici per tutto il resto, per qualche ragione i miei file django-cms continuavano a restituire un 404. Ho controllato settings.py e permessi ma non ho avuto molta fortuna.

Su Ubuntu 14.04 esecuzione Nginx e Gunicion io come in grado di risolvere il problema modificando:

sudo nano /etc/nginx/sites-enabled/django 

E aggiunto il seguente blocco di codice

location /static/cms { 
    alias /usr/local/lib/python2.7/dist-packages/cms/static/cms/; 
} 

Poi riavviato Nginx e Gunicorn

sudo service nginx restart && sudo service gunicorn restart 

e sono stato in grado di vedere tutti i file statici mancanti

1

La soluzione è così semplice che anche a me è mancato.

da settings.py;

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mysitename', 'static'), 
) 

Se si guarda all'interno di "mysitename", esiste un'altra cartella denominata "static". Se metti i tuoi file lì, tutto funzionerà come potresti aspettarti. La cartella "statica" allo stesso livello di manage.py è un'aringa rossa.

Problemi correlati