Django:无法找到静态文件

5

在Windows主机中运行虚拟机客户端的Debian系统。将适配器类型设置为Bridged。在客户端上安装了Django,并使用内置的runserver和内置数据库进行测试。

具有简单的文件结构:

> ..
> templates
>   base.html
> static
>   css
>     base.css
> manage.py
> setting.py
> ..

文件 settings.py:

STATIC_URL = '/static/'

文件 base.html:

{% load static %}
...   
  <link rel="stylesheet" href="{% static 'css/base.css' %}">

出现错误,找不到:

GET http://192.168.XX.XX:8000/static/css/base.css

settings.py中的Debug设置为true(表示应该提供静态文件)。链接看起来正确。那么为什么它不起作用?

编辑:看起来我忘记运行'collectstatic'了。这是运行后的输出:

enter image description here

编辑2:

EXTERNAL_APPS = [
  ..
  'django.contrib.staticfiles',
]
PROJECT_NAME = 'fooproject'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, PROJECT_NAME, 'staticfiles')
STATIC_URL = '/static/'

你有读取权限吗? - Sayse
1
你的静态设置是什么样子的? - Daniel Roseman
1
你首先执行了 collectstatic 操作吗? - Christoph Bluoss
1
EXTERNAL_APPS是什么? - Daniel Roseman
@DanielRoseman EXTERNAL_APPS 只是我自定义的变量,其中包含所有与 Django 相关的应用程序。 - 0leg
显示剩余4条评论
1个回答

8

在ChristophBluoss和DanielRoseman的帮助下,我已经成功解决了我的问题。出现了两个问题:

  1. 我没有运行 python manage.py collectstatic
  2. 配置文件缺少关键设置- STATIC_ROOTSTATICFILES_DIRS

将这些变量添加到 settings.py 文件中,并成功运行 collectstatic 后-一切都正常工作。

P.S. 一个人应该更仔细地阅读Django文档。对我来说,它没有清楚地说明 collectstatic 是必需的。

编辑: 正如DanielRoseman建议的那样,当 DEBUG 设置为 True 时,collectstatic 以及 STATIC_ROOT 都是非必需的。我尝试删除 staticfilesSTATIC_ROOT - 它仍然可以在我的开发环境中工作。因此,STATICFILES_DIRS 是缺失的设置。


2
嗯,在 DEBUG 模式下提供静态文件时,不需要执行 collectstatic。毫无疑问,问题在于缺少 STATICFILES_DIRS 设置。 - Daniel Roseman
1
STATIC_ROOT替换为STATICFILES_DIRS后,问题得到解决。 - Lal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接