[英]Django 1.7 - Serving static files
我正在遵循官方文檔以提供靜態文件,但是在開發控制台中收到錯誤404。 我正在使用“ django.contrib.staticfiles”,因此應該自動提供靜態文件。 這是我的設置:
設置:
STATIC_ROOT = ''
STATIC_URL = '/static/'
模板標題:
{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/app.css" %}">
目錄樹:
django_project
\apps
\static
\css
app.css
\templates
index.html
我可以在firefox控制台中看到我文件的路徑是正確的:
因此,問題一定是Django不提供靜態文件。 我找不到我想要的東西。 任何建議都值得歡迎。
解決方案:我在settings.py中缺少此行
STATICFILES_DIRS = (os.path.join(os.path.dirname(__file__),'static'),)
看起來它是強制性的,與TEMPLATE_DIRS相同。
當您運行collectstatic時,它將所有靜態內容放入STATIC_ROOT指定的路徑中。 檢查部署到生產文檔
如果您使用的是django服務器,請嘗試檢查{%static%}生成的路徑...您可能會有一些斜杠或缺少某些內容。
檢查您是否遵守所有要求 。 您需要在已安裝的應用程序中擁有django.contrib.static文件,並且在主url文件中具有以下內容:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
那應該工作:)
settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'project', "static"),
)
settings.py中的context_processors示例:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
'django.core.context_processors.request',
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
)
settings.py中已安裝應用程序的示例:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
urls.py:
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
對於運行django-cms並遇到404錯誤(特別是您的所有靜態文件的URL都以“ en-us”開頭)的任何人,我發現可以采取以下步驟。
首先,請在您的urls.py文件中關閉模式匹配的國際化功能, 如下所示 :
urlpatterns = i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
相反,應為:
from django.conf.urls import patterns
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
導入很重要,因為django-cms的配置會刪除從django.conf.urls
導入的patterns
。
這解決了重定向問題,但仍然找不到我的靜態文件。 我需要手動將靜態網址添加到網址格式中,如下所示:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
在那之后,靜態文件按預期工作。
我確定這可能與我把我的配置作為Django的新手搞砸有關。 但是由於其他人可能也有同樣的問題,因此我將其作為一種可能的解決方案,即使不理想。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.