Django模板语法错误 - 'staticfiles'不是一个已注册的标签库。

168
升级到 Django 3.0 后,我遇到了以下的 TemplateSyntaxError 错误:
In template /Users/alasdair//myproject/myapp/templates/index.html, error at line 1
'staticfiles' is not a registered tag library. Must be one of: admin_list admin_modify admin_urls cache i18n l10n log static tz

这是我的模板

{% load staticfiles %}
<img src="{% static 'my_image.html' %}">
6个回答

378
如果您的模板中包含以下任何标签:
{% load staticfiles %}
{% load static from staticfiles %}
{% load admin_static %}

然后用以下内容替换:

{% load static %}

你需要做出这个更改,因为 {% load staticfiles %}{% load admin_static %} 在Django 2.1中已被弃用,并在Django 3.0中移除


1
不幸的是,它与Django==3.0.5djangorestframework==3.11.0django_rest_swagger==2.2.0无法无缝配合使用。这将需要进行collectstatic操作,然后再进行替换。 - JP Ventura

20
  • 尝试使用{% load static %}而不是{% load staticfiles %}
  • 如果CSS或其他文件的效果未反映在您的模板中,则还需在settings.py文件末尾编写以下行:
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
VENV_PATH = os.path.dirname(BASE_DIR)
STATIC_ROOT = os.path.join(VENV_PATH, 'static_root')

3
添加 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] 解决了这个问题。之前我将静态文件目录添加到了模板中的 DIRS 中,但没有起作用。非常感谢! - k0rnik
2
这应该被标记为正确答案。其他选项现在已经过时了。 - Alex8752
1
CSS部分在Windows 7 64位系统中也能正常工作吗? 我尝试了相同的操作,但出现了错误。 - xxx

9

这对我来说是有效的,使用的是Django 3.1.4版本。

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

这对我有效。


2

我也遇到了这个问题,你可以将 {% load staticfiles from static %} 替换为 {% load static %}

替换位置:

进入你的虚拟环境 "venv" ,找到路径 "/lip/python3.X/site-packages/leaflet/templates/leaflet/admin/widget.html" 以及该目录下所有的.HTML文件进行替换。


2
更改 site-packages 中的文件是个坏主意。在你的情况下,最好升级 django-leaflet 到支持 Django 3.0+ 的新版本。 - Alasdair

0

我的问题出在这里文档的第4步:https://docs.djangoproject.com/en/3.2/howto/static-files/

"4. 在你的应用程序中创建一个名为 static 的文件夹来存储静态文件。例如,my_app/static/my_app/example.jpg."

一旦我纠正了目录结构,一切都正常了。


0
我遇到了同样的问题,并尝试使用各种方法来解决它。然而,最终我修改了下一行代码,其中引用了我的CSS文件。解决方案与上面提到的一样,只是多了一步。
   {% load staticfiles %}  
<link rel="stylesheet" href="{% static 'css/style.css' %}"/>  

改为:

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

改变relhref的顺序不应该有任何影响。Abayomi Olowu的回答缺少了=符号,所以我已经添加进去了。 - undefined

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