Django findstatic:找不到匹配的文件

Posted

技术标签:

【中文标题】Django findstatic:找不到匹配的文件【英文标题】:Django findstatic : No matching file found 【发布时间】:2015-12-01 15:08:19 【问题描述】:

不久前,我尝试在 Django 中使用“collectstatic”来提供静态文件,但失败了。现在我终于尝试让我的静态文件在我的开发环境中正确服务。我不知道出了什么问题。

当我运行python manage.py findstatic images/add.png

控制台返回:

base path: C:\Projects\AlmondKing\AlmondKing
static files dirs: C:\Projects\AlmondKing\AlmondKing\static
No matching file found for 'images/add.png'.

目录路径正确,但仍然无法找到我的文件。我尝试了许多不同的设置配置均无济于事。谁能发现我的问题?以下是我认为的所有相关设置:

BASE_DIR = os.path.abspath(os.path.dirname(__file__))

DEBUG = True

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'AlmondKing.InventoryLogs',
    'AlmondKing.FinancialLogs',
    'AlmondKing.AKGenius',
)

STATIC_URL = '/static/'
STATIC_FILES_DIRS = (
    os.path.join((BASE_DIR), "static")
)

print("base path:", BASE_DIR)
print("static files dirs:", STATIC_FILES_DIRS)

编辑:我找到了findstatic --verbosity 2 command,唯一被搜索的目录是:C:\Users\Adam\Envs\AlmondKing\lib\site-packages\django\contrib\admin\static

显然它只是在我的虚拟环境中查看,而不是在我的项目目录中。这是正常的 Django 行为吗?

【问题讨论】:

【参考方案1】:

设置是STATICFILES_DIRS,而不是STATIC_FILES_DIRS

您还缺少设置中的逗号。没有逗号,它被视为字符串而不是元组。

应该是:

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

【讨论】:

很好看,谢谢。不幸的是,它仍然告诉我没有找到匹配的文件。 您要查找的文件images/add.png 的位置是什么? 完整的文件路径是 C:\Projects\AlmondKing\AlmondKing\static\images\add.jpg - 我只是再次导航到它确认 您在问题中写了.png,在评论中写了.jpg。这就是问题所在吗?除此之外,我看不出任何问题。希望你能弄清楚。 没关系,它应该是一个元组,双反斜杠表明它们是实际的反斜杠,而不是转义下一个字符。 Django 实际上建议对路径使用正斜杠,即使对于 Windows。【参考方案2】:

终于! Referring here,我了解到静态文件目录必须位于单个应用程序的目录中。我在项目根目录中有静态目录。我把它移到了一个应用程序目录中,它现在可以工作了。

整个项目将使用这些相同的静态文件。如果有人知道,我是否需要在每个应用程序的目录中都有一份副本,或者我的所有项目的应用程序都可以共享一个静态目录?谢谢!

【讨论】:

我很高兴你让它工作,但说静态文件必须在单个应用程序的目录中是不正确的。来自the docs:“默认是查看STATICFILES_DIRS 中定义的所有位置以及INSTALLED_APPS 设置指定的应用程序的‘静态’目录。”如果您对某个应用的静态目录中的文件感到满意,请保持原样——您无需将文件复制到每个应用的静态目录中。 好吧,由于某种原因,它只扫描了我的虚拟环境中的一个位置,直到我移动了静态目录(请参阅我对findstatic --v 2 的结果的编辑)。我无法让findstatic 扫描我固定为STATIC_FILES_DIRS 的目录,即使我直接硬编码了路径。知道为什么会这样吗?会不会和virtualenvvirtualenvwrapper有关? 我发现了问题,你拼错了设置。应该是STATICFILES_DIRS

以上是关于Django findstatic:找不到匹配的文件的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使创建了对象,django 也找不到与查询匹配的任何对象

Django url正则表达式匹配但找不到页面错误

找不到页面(404):django无法匹配路径

如何解决找不到反向匹配的问题?

如何在 Django 的 URL 匹配中获取中文参数

Django 找不到应用模板