在Django3.x中,使用python manage.py runserver时出现错误
在Django3.x中出现runserver错误。
当我把Django从2.x版本升级到3.x版本并启动了一个新项目时。
$django-admin startproject mysite
根据之后的情况
$python manage.py runserver
在执行时,如果版本为2.x,则服务器会直接启动,然而出现了以下错误。
$python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
Exception in thread django-main-thread:
Traceback (most recent call last):
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\utils.py", line 66, in __getitem__
return self._engines[alias]
KeyError: 'django'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\backends\django.py", line 121, in get_package_libraries
module = import_module(entry[1])
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 790, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\contrib\admin\templatetags\admin_static.py", line 5, in <module>
from django.utils.deprecation import RemovedInDjango30Warning
ImportError: cannot import name 'RemovedInDjango30Warning' from 'django.utils.deprecation' (C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\utils\deprecation.py)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\threading.py", line 954, in _bootstrap_inner
self.run()
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\threading.py", line 892, in run
self._target(*self._args, **self._kwargs)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\utils\autoreload.py", line 53, in wrapper
fn(*args, **kwargs)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\core\management\commands\runserver.py", line 118, in inner_run
self.check(display_num_errors=True)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\core\management\base.py", line 392, in check
all_issues = checks.run_checks(
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\core\checks\registry.py", line 70, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\contrib\admin\checks.py", line 78, in check_dependencies
for engine in engines.all():
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\utils.py", line 90, in all
return [self[alias] for alias in self]
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\utils.py", line 90, in <listcomp>
return [self[alias] for alias in self]
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\utils.py", line 81, in __getitem__
engine = engine_cls(params)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\backends\django.py", line 25, in __init__
options['libraries'] = self.get_templatetag_libraries(libraries)
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\backends\django.py", line 43, in get_templatetag_libraries
libraries = get_installed_libraries()
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\backends\django.py", line 108, in get_installed_libraries
for name in get_package_libraries(pkg):
File "C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\template\backends\django.py", line 123, in get_package_libraries
raise InvalidTemplateLibrary(
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'django.contrib.admin.templatetags.admin_static': cannot import name 'RemovedInDjango30Warning' from 'django.utils.deprecation' (C:\Users\xxxxx\anaconda3\envs\myconda\lib\site-packages\django\utils\deprecation.py)
这是什么错误……
在互联网上进行搜索试试看
好像无法从django.utils.deprecation中导入RemovedInDjango30Warning,出现了类似错误。
在一个英语网站上有一个人提出了类似的问题,但是回答是
只需将以下内容注释掉:
python3.x/site-packages/django/contrib/admin/templatetags/admin_static.py
python3.x/site-packages/django/contrib/staticfiles/templatetags/staticfiles.py在这两个文件中,注释掉以下行:
from django.utils.deprecation import RemovedInDjango30Warning
这样就可以了~
有人提出了质疑说:“因为这种方法可能导致其他的无法启动,所以很危险吧”,但最终却没有得到明确的回答。
我来看看deprecation.py的内容
考虑到只需要一种选择,以下是对句子的汉语同义表达:
我思考着只能依靠自己解决,首先想着查看 deprecation.py 的内容,于是我打开了它。
.
.
.
class RemovedInNextVersionWarning(DeprecationWarning):
pass
class RemovedInDjango40Warning(PendingDeprecationWarning):
pass
class warn_about_renamed_method:
.
.
.
虽然没有”RemovedInDjango30Warning”,但是有”RemovedInDjango40Warning”,而且只是一个空的class,什么也不做。
试着改变一下内部内容看看…
我觉得东西是需要尝试的,所以我尝试在deprecation.py中添加以下内容。
class RemovedInDjango30Warning(PendingDeprecationWarning):
pass
于是
$python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
April 10, 2021 - 15:57:05
Django version 3.1.2, using settings 'bestname.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
很容易地服务器就启动了起来(笑)
总结
为了自己的记录,我留下了这个,但如果在升级到Django3.x时遇到类似的错误,请尝试一下。