在 Django 上加载静态文件的问题

Posted

技术标签:

【中文标题】在 Django 上加载静态文件的问题【英文标题】:Problem with loading static files on Django 【发布时间】:2020-06-24 06:20:02 【问题描述】:

我正在使用 Django 3.0.3 和 Python 3.7.6。

我在 https://docs.djangoproject.com/en/3.0/howto/static-files/ 上关注了 Django 文档,但我找不到问题所在。

目录:

project_name
   -app_name
   -static
      -css
         -main.css
      -js
      ...
   -project_name
      ...
      -settings.py

settings.py:

INSTALLED_APPS = [
    ...
    'django.contrib.staticfiles',
]
...
STATIC_URL = '/static/'

当我尝试在模板中使用静态文件时:

% load static %
<link rel="stylesheet" href="% static "css/main.css" %">

pycharm 显示 unresolved template reference '"css/main.css"'

终端节目 "GET /static/css/animate.css HTTP/1.1" 404 1671

【问题讨论】:

您能否重新格式化您的目录列表以使其有意义? 您是否:1) 定义了 STATIC_ROOT 和/或 STATICFILES_DIRS 2) 运行 collectstatic 3) 为静态文件添加了 urlpatterns? DEBUG=true 还是 false? 感谢您的提示。我刚开始学习 Django,这些技巧帮助我更好地理解它。 【参考方案1】:

我通过以下步骤解决了这个问题:

1.在settings.py中添加如下代码

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

2.在我的模板中添加type="text/css"

&lt;link rel="stylesheet" type="text/css" href="% static "css/main.css" %"&gt;

虽然它对我有用,但我不知道为什么。

【讨论】:

【参考方案2】:

在你的 url.py 中使用它

    urlpatterns+=static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns+=static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

【讨论】:

【参考方案3】:

我遇到了同样的问题,但我使用的是django 3.1。 我只将此行添加为official document:

在settings.py中

...
STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR / 'static']

在 .html 文件中

% load static %
...
<link rel="stylesheet" href="% static 'css/application.css' %" type="text/css" />

而且效果也很好。

【讨论】:

以上是关于在 Django 上加载静态文件的问题的主要内容,如果未能解决你的问题,请参考以下文章

Django 静态文件未加载且没有错误迹象

Django静态文件没有加载。修复settings.py以在相对路径上加载文件

[django]django 在apache2上部署静态文件如何加载

DJANGO:静态文件未在实时服务器中加载(但在本地加载)?

Django:无法从 DigitalOcean Droplet 上的模板加载静态文件

django 改了静态文件但是页面没有变