2011-12-18 64 views
6

我對Django還比較陌生,並且剛剛開始在Django-CMS上探索,但是,我無法從official docs中瞭解基本介紹。django-cms沒有正確路由到靜態url?

我的問題可能與sekizai有關,但它感覺就像是urls.py中的一個基本的url問題。

基本上,我幾乎完全按照教程。唯一的區別是我的博客/,完整路徑〜/ workspace/djangocms/blog /下有我的cms應用程序。我在settings.py下正確設置了STATIC_URLSTATIC_ROOT,我的MEDIA_URLMEDIA_ROOT也一樣。

我調出媒體路徑和目錄,因爲如果我將我的基本模板設置爲鏈接到css {{ MEDIA_URL }}css/somecss.min.css它工作正常。但是,對STATIC_URL執行相同操作:{{ STATIC_URL }}css/somecss.min.css不起作用並生成404。

此外,從我可以告訴,默認/靜態/路線似乎對其他目錄正常工作。由{% cms_toolbar %}生成的代碼生成罰款和來自像/static/cms/css/plugins/cms.toolbar.css等地方的css被正確地服務。

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 

回答

6

的內容得到了freenode上#django我的答案。如果有人需要,在這裏自己回答:

主要用於django-cms,STATIC_ROOT主要用於生產過程中django-cms本身的資產。如果django正在使用python manage.py runserver方法運行,則STATIC_ROOT無關緊要。

From the Django docs:使用collectstatic收集全部採用靜態資產(這對於Django的CMS可能會像在/ usr/local/lib目錄/ Python的##/DIST的包的目錄下)。這顯示了STATIC_ROOT在生產過程中將使用哪些文件。

如果要使用STATIC_URL爲其他目錄服務,則必須將它們添加到settings.pySTATICFILES_DIRS部分。 (請務必閱讀註釋 - 使用絕對路徑而不是相對路徑)。實際上,在製作純Django應用程序時,這實際上相當明顯,但是,因爲我想嚴格遵循Django-cms教程,所以不像應該那樣明顯。

8

在遵循相同的教程後,我回顧了這個問題。

我的網站將加載標準歡迎頁面,我可以創建CMS頁面。但是,當我嘗試在我的模板中加載靜態文件時,我一直在收到404錯誤。

由OP給出的答案幫了我很多。

只是要清楚,這個工作對我來說:

  1. 重命名該項目的靜態目錄類似local_static

  2. 添加以下設置。PY

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

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

這爲我工作。我現在可以停止拉我的頭髮

0

我發佈了相同的答案here,但我遇到了相同的問題。雖然我能夠爲其他所有的靜態文件提供服務,但出於某種原因,我的django-cms文件一直返回404。我檢查了settings.py和權限,但沒有多少運氣。

在Ubuntu 14.04上運行的Nginx和Gunicion我爲能夠通過編輯來解決這個問題:

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

我添加以下代碼塊

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

然後我重新啓動的Nginx和Gunicorn

sudo service nginx restart && sudo service gunicorn restart 

我能看到所有缺少的靜態文件

1

解決方案非常簡單,我也錯過了。

from settings.py;

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

如果你看看'mysitename'裏面有另一個名爲'static'的文件夾。如果你把你的文件放在那裏,一切都會按照你所期望的那樣工作。與manage.py同級別的'static'文件夾是一個紅色鯡魚。