尝试直接在 Django 中加载静态 url 时收到 404 错误

Posted

技术标签:

【中文标题】尝试直接在 Django 中加载静态 url 时收到 404 错误【英文标题】:Receiving 404 error when trying to load static urls directly in Django 【发布时间】:2012-10-17 16:13:32 【问题描述】:

当我访问我的静态文件的 url (http://127.0.0.1:8000/site_media/static/css/site_base.css) 时,我收到 404 错误消息。

来自日志的 404

[27/Oct/2012 14:14:54] "GET /site_media/static/js/libs/modernizr-2.5.2.min.js HTTP/1.1" 404 1716
[27/Oct/2012 14:34:20] "GET /site_media/static/css/site_base.css HTTP/1.1" 404 1677

目录结构

mysite
    |-- manage.py
    |-- mysite
         |-- settings
             |-- base.py
             |-- dev.py
             |-- prod.py
    |-- site_media
       |-- static
           |-- css
               |-- site_base.css

site_base.html

<link rel="stylesheet" href=" STATIC_URL css/site_base.css" />

设置

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.request",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.static",
]

STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles.finders.DefaultStorageFinder',
]

STATIC_URL = "/site_media/static/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")

更新:

urls.py

from django.conf import settings
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from django.contrib.staticfiles.urls import staticfiles_urlpatterns

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r"^$", direct_to_template, 'template' : 'home.html' , name="home"),
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^grappelli/', include('grappelli.urls')),
    url(r'^profile/', include('profiles.urls')),
)

urlpatterns += staticfiles_urlpatterns()

【问题讨论】:

您是否配置了STATIC_URLSTATIC_ROOT?查看docs.djangoproject.com/en/dev/howto/static-files 的文档。如果你已经这样做了,请在上面的代码中更新这些值,并在你这样做时发布你得到的东西127.0.0.1:8000/static 是的,我在上面看到了更新的设置 如the link @jpic provides 中所述,您需要在主 url 配置中使用urlpatterns += staticfiles_urlpatterns()。您能否发布您的主要urls.py 并添加您的DEBUG 设置? 我已按要求包含主 urls 文件。我已经包含了额外的 url 设置,但我无法修复这个问题。 【参考方案1】:

简答

Django 确实在 STATIC_URL 上提供 STATIC_ROOT,除非你 tell it too。

长答案

这应该是一个常见问题,这里有一篇关于using django.contrib.staticfiles right 的文章(免责声明:由我撰写,感谢反馈)。它类似于文档,但试图更短更实用。

【讨论】:

【参考方案2】:

使用&lt;link rel="stylesheet" href=" STATIC_URL css/site_base.css" /&gt; 代替

&lt;link href="%static 'css/style.css'%" rel="stylesheet"&gt; 并确保您的值是 STATIC_URL = '/static/' 在 settings.py 中

【讨论】:

以上是关于尝试直接在 Django 中加载静态 url 时收到 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

自定义静态文件未在 django 项目中加载

CSS静态文件未在Django中加载

静态 CSS 文件未在 Django 框架中加载

在静态文件中加载图像

在 django 中加载带有变量名的静态文件

在 Django 中的 css 文件中加载静态文件