簡體   English   中英

Django 1.7-提供靜態文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM