【问题标题】:Serving static files from the project directory in Django从 Django 的项目目录中提供静态文件
【发布时间】:2023-08-15 23:49:01
【问题描述】:

我的项目结构如下:

myproject
    - myapp
    - manage.py
    - myproject
          - settings.py
          - urls.py
          ...
    - static
    - templates

我想在这个静态文件夹中提供我所有的静态文件。在我的 settings.py 中,我有以下内容:

STATIC_URL = '/static/'

但是,在我的一个模板中,当我使用以下命令调用静态文件时...

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

...什么都没有加载。

但是,如果我在 myapp/static/css/styles.css 中添加 css 文件,则一切正常。如何从我的项目根文件夹中提供静态文件?感谢您的帮助。

【问题讨论】:

  • 我不确定我是否理解您的问题,因为在代码示例中,您似乎正在尝试从 myproject/static/css/styles.css 加载文件,并且在您提到的最后一段中在上述位置添加css文件是可行的。我是否理解正确?您想从哪里提供静态文件?
  • 您能分享以下设置吗? STATICFILES_DIRSSTATICFILES_FINDERSSTATIC_ROOT
  • 您在开发服务器上工作吗?在这个 SO link 中有一个广泛的解释

标签: django django-staticfiles django-static


【解决方案1】:

第一步:您的项目结构(文件夹目录)似乎没问题。

myproject
- myapp
- manage.py
- myproject
      - settings.py
      - urls.py
      ...
- static
- templates

第二:需要在settings.py文件中定义STATIC_URL = '/static/'

第三:需要在模板文件中加载静态并使用相对路径。

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

添加这个 settings.py 文件。

# Add static file directory
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

settings.py 中的已安装应用列表应该存在于列表中的django.contrib.staticfiles 中。如果没有,请确保它在列表中。

【讨论】: