2011-12-18 17 views
6

Wciąż jestem stosunkowo nowy w Django i dopiero zacząłem grzebać w Django-CMS, jednak nie mogę ominąć podstawowego wprowadzenia z official docs.django-cms nie prowadzi poprawnie do statycznego adresu URL?

Mój problem może być związany z sekizai, ale wydaje się, że jest to podstawowy adres URL w urls.py.

Zasadniczo podążałem za tutorialem prawie dokładnie. Jedyną różnicą jest to, że mam swoją aplikację cms pod blogiem /, pełna ścieżka ~/workspace/djangocms/blog /. Ustawiłem odpowiednio STATIC_URL i STATIC_ROOT w settings.py i to samo dotyczy moich MEDIA_URL i MEDIA_ROOT.

Wyświetlam ścieżkę i katalog multimediów, ponieważ jeśli ustawię szablon podstawowy na link do css na {{ MEDIA_URL }}css/somecss.min.css, to działa dobrze. Jednak robi to samo z STATIC_URL: {{ STATIC_URL }}css/somecss.min.css nie działa i produkuje 404.

Ponadto, z tego, co wiem, domyślne/statyczne/trasy wydają się działać dobrze dla innych katalogów. Kod wygenerowany przez {% cms_toolbar %} generuje grzywnę i css z miejsc takich jak /static/cms/css/plugins/cms.toolbar.css są podawane poprawnie.

Zawartość 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 

Odpowiedz

6

Got moją odpowiedź z #django na freenode. Odpowiadając na nie osobiście, w razie potrzeby:

Głównie dla django-cms, STATIC_ROOT jest używany głównie do zasobów z samego django-cms podczas produkcji. Jeśli django jest uruchamiane przy użyciu metody python manage.py runserver, STATIC_ROOT jest nieistotny.

From the Django docs: Użyj collectstatic, aby zebrać wszystkie użyte zasoby statyczne (które dla django-cms będą prawdopodobnie znajdować się w katalogu takim jak/usr/local/lib/python ##/dist-packages). Pokazuje, które pliki STATIC_ROOT będą używać podczas produkcji.

Jeśli chcesz wyświetlać inne katalogi z adresem STATIC_URL, musisz dodać je do sekcji STATICFILES_DIRS z settings.py. (Pamiętaj, aby przeczytać komentarze - użyj ścieżek bezwzględnych, a nie względnych). Jest to dość oczywiste przy tworzeniu czystej aplikacji Django, ponieważ chciałem ściśle przestrzegać tutoriala Django-cms, co nie było tak oczywiste, jak powinno być.

8

Kręciłem się z tym problemem po wykonaniu tego samego samouczka.

Moja strona ładuje standardową stronę powitalną i mogę tworzyć strony CMS. Jednak gdy próbowałem załadować statyczne pliki w szablonach, ciągle otrzymywałem błędy 404.

Odpowiedź udzielona przez PO bardzo mi pomogła.

Wystarczy być jasne, to pracował dla mnie:

  1. Zmiana nazwy katalogu statycznych w projekcie do czegoś podobnego local_static

  2. Dodaj do następujących ustawień.py

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

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

Ten pracował dla mnie. Mogę teraz przestać ciągnąć moje włosy

0

Wysłałem tę samą odpowiedź here, ale napotkałem te same problemy. Chociaż mogłem serwować pliki statyczne dla wszystkich innych elementów, z jakiegoś powodu moje pliki django-cms nadal zwracały 404. Sprawdziłem ustawienia settings.py i uprawnienia, ale nie miałem szczęścia.

Na Ubuntu 14.04 działa Nginx i Gunicion I jak w stanie rozwiązać ten problem poprzez montaż:

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

I dodaje następujący blok kodu

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

Potem wznowiona Nginx i Gunicorn

sudo service nginx restart && sudo service gunicorn restart 

i mogłem zobaczyć wszystkie brakujące pliki statyczne

1

Rozwiązanie jest tak proste, że też je przegapiłem.

z settings.py;

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

Jeśli zajrzysz do "mysitename", pojawi się kolejny folder o nazwie "static". Jeśli umieścisz tam swoje pliki, wszystko będzie działać tak, jak możesz tego oczekiwać. Folder "statyczny" na tym samym poziomie co plik manage.py jest czerwonym śledziem.

Powiązane problemy