在 Django 视图中找不到静态文件

Posted

技术标签:

【中文标题】在 Django 视图中找不到静态文件【英文标题】:Static file cannot be found in Django view 【发布时间】:2013-12-14 15:56:28 【问题描述】:

我在 Django 1.5.4 上的开发服务器中遇到静态文件问题。我不确定在实际生产服务器(运行 Apache)上是否是同样的问题,因为我找到了一个目前有效的解决方案(只需硬编码完整的 URL - 我知道这很糟糕,但它得到了工作完成)。

我正在使用 Reportlab 为我的项目创建一个 PDF 文件,我需要在其中包含一张图片。我在另一个post 中关注了答案:

from django.templatetags.static import static
url = static('x.jpg')

不幸的是,我从服务器得到的答案是 IO 错误:'无法打开资源“localhost:8000/static/images/x.jpg”',即使将其复制并粘贴到 URL 栏中清楚地显示我说照片就在那里。

我关于静态文件的设置如下,它们适用于其他所有内容(CSS、javascript 等):

ROOT_PROJECT = os.path.join(os.path.split(__file__)[0], "..")
STATIC_ROOT = os.path.join(ROOT_PROJECT, 'static')
STATICFILES_DIRS = ()
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

感谢您的帮助!

【问题讨论】:

【参考方案1】:

确保django.contrib.staticfiles 包含在您的INSTALLED_APPS 中。

通常有几种方法可以存储静态文件。

    一种方法是在您的应用程序文件夹中创建一个静态文件夹并将文件存储在那里。你可以查看here: 是创建一个文件夹并存储不用于任何特定应用的静态文件。

来自django documentation:

您的项目可能还会包含未绑定到特定应用的静态资产。除了在应用程序中使用 static/ 目录之外,您还可以在 settings 文件中定义目录列表 (STATICFILES_DIRS),Django 也会在其中查找静态文件。

例如:

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
)

如果您正在生产,请查看production deployment 了解更多详情!

【讨论】:

正如我所说的 - 它与所有其他静态文件 - CSS、Javascript 等都可以正常工作。它们都在主应用程序的静态文件夹中(在子文件夹 js / css 中),没有任何问题任何。除非我指定确切的地址,否则不会加载此图像。那里肯定有其他问题。

以上是关于在 Django 视图中找不到静态文件的主要内容,如果未能解决你的问题,请参考以下文章

apache服务器在Django项目中找不到静态文件

如何在 Django 应用程序的视图中引用静态文件

在 wsgi.py 的“django.py”中找不到引用“DjangoWhiteNoise”

Spring-Boot ResourceLocations 在资源/静态/css 中找不到 css 文件

Django - 找不到静态文件

找不到静态文件 - 在 Heroku 上部署 Django