Django4.1搭配DRF3.14.0出现SkipError导入错误求解决
遇到如下错误:
raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template
library specified. ImportError raised when trying to load
'rest_framework.templatetags.rest_framework': cannot import name
'SkipError' from 'rest_framework.exceptions'
(C:\Users\C.M.virtualenvs\src-Hn7NFGL7\lib\site-packages\rest_framework\exceptions.py)
项目配置:
settings.py中的INSTALLED_APPS:
INSTALLED_APPS = [ # apps 'accounts', 'home', 'job', 'contact', # django modules "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", # third-party 'bootstrap4', 'cities_light', 'django_filters', 'rest_framework', ]
urls.py配置:
from django.contrib import admin from django.urls import path, include from django.conf import settings from django.conf.urls.static import static urlpatterns = [ path('accounts/', include('django.contrib.auth.urls')), path('accounts/', include('accounts.urls', namespace='accounts')), path("admin/", admin.site.urls), path('api-auth/', include('rest_framework.urls')), path('jobs/', include('job.urls', namespace='jobs')), path('contact/', include('contact.urls', namespace='contact')) ] urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
使用环境:Django 4.1 + DRF 3.14.0
解决方法
1. 重新安装DRF修复损坏的安装包
这个错误大概率是DRF安装过程中文件损坏或不完整导致的,先卸载并重新安装对应版本:
pip uninstall -y djangorestframework pip install djangorestframework==3.14.0
2. 升级DRF到兼容Django 4.1的更高版本
如果重新安装后问题依旧,尝试升级DRF到最新的兼容版本(DRF 3.15+完全支持Django 4.1):
pip install djangorestframework --upgrade
3. 检查并升级第三方依赖库
项目中使用的cities_light等第三方库可能依赖旧版DRF,导致冲突,升级这些库到最新兼容版本:
pip install cities-light django-filters bootstrap4 --upgrade
4. 排查自定义模板或扩展的引用
如果以上步骤都无效,检查项目中是否有自定义模板或扩展代码直接引用了SkipError(这个异常类在DRF 3.13+版本已被移除),若有则替换为DRF当前版本的替代方案(比如使用APIException自定义异常)。
内容的提问来源于stack exchange,提问作者Omnia Osman

