在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时遇到类似的错误,请尝试一下。

bannerAds