为何在Django项目中使用Crispy-forms会出现No module named 'django.utils.lru_cache'错误?
Django Crispy-forms 导入错误解决方案
错误原因
你遇到的No module named 'django.utils.lru_cache'报错是版本不兼容导致的:
- Django 4.0+ 已移除
django.utils.lru_cache模块 - 你使用的
crispy-forms 1.14.0为旧版本,仍依赖这个已被移除的模块,触发模板库导入失败。
解决步骤
升级crispy-forms到兼容版本
在虚拟环境中执行升级命令:pip install --upgrade django-crispy-forms>=2.02.0及以上版本的crispy-forms已适配Django 4.x及更高版本。
确认项目配置
打开settings.py,确保crispy_forms在INSTALLED_APPS中,同时配置对应样式框架的模板包(以Bootstrap5为例):INSTALLED_APPS = [ # 其他已存在的应用 'crispy_forms', 'crispy_bootstrap5', ] CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" CRISPY_TEMPLATE_PACK = "bootstrap5"若使用其他样式框架,替换为对应的模板包即可(如
bootstrap4)。简化模板代码
升级后的crispy_forms_tags已包含过滤器功能,可移除模板中多余的{% load crispy_forms_filters %},简化后代码如下:{% extends "blog/base.html" %} {% load crispy_forms_tags %} {% block content %} <div class="content-section"> <form method="POST"> {% csrf_token %} <fieldset class="form-group"> <legend class="border-bottom mb-4">Join Today</legend> {{ form|crispy }} </fieldset> <div class="form-group"> <button class="btn btn-outline-info" type="submit">Sign Up</button> </div> </form> <div class="border-top pt-3"> <small class="text-muted"> Already Have An Account? <a class="ml-2" href="#">Sign In</a> </small> </div> </div> {% endblock content %}
原始报错信息
File "D:\Django_Project\venv\lib\site-packages\django\template\backends\django.py", line 131, in get_package_libraries raise InvalidTemplateLibrary(django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to 'crispy_forms.templatetags.crispy_forms_field': No module named 'django.utils.lru_cache'
内容的提问来源于stack exchange,提问作者Kaiser Nabola
相关产品推荐
相关产品推荐

