在 django 开发中加载静态文件时出现 404 错误

Posted

技术标签:

【中文标题】在 django 开发中加载静态文件时出现 404 错误【英文标题】:404 error when loading static files in development in django 【发布时间】:2014-10-20 10:04:41 【问题描述】:

我正在尝试在 django 的开发环境中加载静态文件。我的设置如下所示:

STATIC_ROOT = '/MyProject/myapp/static/'
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.humanize',
)

我的网站 urls.py 看起来像:

from django.conf import settings
import views

from django.conf.urls.static import static
admin.autodiscover()

urlpatterns = patterns('',

) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我的 header-include.html 看起来像:

<link href="% static 'css/mycss.css' %" media="screen" rel="stylesheet" type="text/css">

我的 css director 位于:

mysite > 静态 > css

我得到错误:

localhost/static/css/mycss.css 404(未找到)

我做错了什么???

【问题讨论】:

不需要静态文件查找器或静态根目录 静态 url 不必映射 您需要将 staticfiles contrib 应用添加到您的应用列表中。 在您的项目文件夹中创建一个名为 static 的文件夹,它应该可以正常工作 @wonderwhy 我确实安装了应用程序。我添加了更多细节 【参考方案1】:

不需要文件查找器或静态根目录。将 djando.contrib.staticfiles 应用程序添加到您的应用程序中。删除 url 映射并在项目根目录中创建文件夹。它应该只适用于您生成的链接。

所以代码:

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

或者将文件夹放在应用程序中。但是如果你这样做,你必须将静态 url 称为:

STATIC_URL

或者只使用 /static/。然后在 django 模板调用之后,添加文件路径。

如果您想在应用内使用它,请使用您正在使用的标签。这是针对特定文件的使用,例如自定义样式表或 js 文件,但对于一般样式,最好将其放在我告诉您的位置,否则如果您想使用它,您必须在每个应用程序中复制它。

【讨论】:

我删除了这行:+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 还是不行 对我来说关键是 STATICFILES_DIRS 行,我需要包含它。 将作为项目目录一部分的静态文件夹移动到其中一个应用程序也可以在启用上述设置的情况下移回原始项目文件夹。我相信 django 会以这种方式刷新。由于 STATICFILES_DIRS 设置显然适用于应用程序之外的静态文件夹【参考方案2】:

在 django2 中,您只需要默认为单个应用程序创建静态和模板文件夹模板渲染和静态文件为静态和模板文件夹查找单个应用程序,以防即使在创建文件夹和复制文件后不起作用,请尝试停止并再次运行服务器,它会修复 :)

【讨论】:

我在子应用中有一个静态文件夹,Django 在开发中无法识别该文件夹。重新启动服务器实际上解决了这个问题。 @webtweakers 谢谢。这条评论让我免于在创建新应用程序后一小时碰壁。 @MichaelRomrell,我确实提到要停止并再次运行开发服务器,只要您找到解决方案就没有问题,感谢 webtweakers 的评论【参考方案3】:

我需要将我的静态文件夹移动到应用程序。 django 文档指定 django 将在每个应用程序中查找静态文件夹。我猜站点根文件夹不算在内,所以没有找到。

感谢这个帖子:Django Static Files Development

【讨论】:

是的,这是真的。但是,如果您不想这样做,则无需这样做。你只需要在我对你的代码的回答中添加我的内容

以上是关于在 django 开发中加载静态文件时出现 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

Django:在使用模板继承时在基本模板文件中加载自定义过滤器时出现问题

在 java 中加载 freemarker 模板时出现 FileNotFoundException

“尝试在浏览器窗口中加载我的flask应用程序时出现URL未找到错误”

从包中加载 NIB 时出现异常

尝试在 Windows Server 2003 上下载文件时出现 404 错误

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