Skip to main content
 首页 » 编程设计

python之Django 为静态文件返回 404

2025年05月04日35lidabo

在我的本地 Mac 服务器上运行 Django 项目时,我在尝试访问静态文件时收到 404 错误。

我的目录结构如下:

myapp/static 

在我的 settings.py 中,我尝试了以下各种组合:

STATIC_URL = '/static/' 
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
 
PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 
 
STATICFILES_DIRS = [ 
    os.path.join(PROJECT_ROOT, 'static'), 
    '/var/www/myapp/static', 
    '/pycharmprojects/myapp/static' 
] 
 
STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    'django.contrib.staticfiles.finders.FileSystemFinder', 
) 

每次使用静态文件时,我都会在 PyCharm 中收到类似这样的错误:

GET /static/img/pastedsvg%2017.svg HTTP/1.1" 404 101 

在 Firefox 中出现这样的错误:

GET  
http://127.0.0.1:8888/static/img/pastedsvg%2017.svg [HTTP/1.0 404 NOT FOUND 15ms] 

我已经在 Stackoverflow 中查看了这个问题的其他答案并尝试了这些建议,但到目前为止没有任何效果。

请您参考如下方法:

很难说出问题到底是什么,但以下一些观察可能会有所帮助:

  1. STATIC_ROOT 仅用于 collectstatic。当您从命令行 (python -m django collectstatic) 运行时,collectstatic 将在此处复制您的静态文件。
  2. STATIC_ROOT 不应包含在 STATICFILES_DIRS 中,因为这会混淆 collectstatic,因为它的工作是将静态文件从您的静态目录复制到 STATIC_ROOT。
  3. AppDirectoriesFinder 将在您的每个应用程序下名为 static 的目录中查找静态文件。因此,例如,如果您的项目位于 /pycharmprojects/myapp/,AppDirectoriesFinder 将在诸如 /pycharmprojects/myapp/anapp 的目录中查找静态文件/static 和 /pycharmprojects/myapp/anotherapp/static(对于 INSTALLED_APPS 中列出的每个应用程序)并将它们复制到 STATIC_ROOT。
  4. FileSystemFinder 将使用 STATICFILES_DIRS 中的值来查找静态文件并将它们复制到 STATIC_ROOT(这就是为什么您的值STATIC_ROOT 不应列在 STATICFILES_DIRS 中)。
  5. 在 Debug模式下,您不需要collectstatic,因为 Django 会在原始位置查找文件,但在非 Debug模式下(DEBUG = False 在您的Django 配置文件),您需要运行 collectstatic 以便 Django 找到您的静态文件。

因此,据此,我建议:

  1. 从您的 STATICFILES_DIR 中彻底删除 os.path.join(PROJECT_ROOT, 'static')
  2. 如果 STATICFILES_DIR 指向与 os.path.join(PROJECT_ROOT, 'static' )
  3. 如果您没有在 Debug模式下运行(DEBUG = True 在您的 Django 配置文件中),请从命令行运行 collectstatic 以便 Django 可以看到您的静态文件.

还有一个问题。您的 BASE_DIR 指向哪个目录?看起来 PROJECT_DIR 可能是多余的,因为它指向 BASE_DIR 通常指向的位置。

希望这面文字墙中的内容对您有所帮助。

干杯!