cannot import name ‘parse_header’ from ‘django エラー
状況
「runserver」時に以下のエラーが出て立ち上がらない。
django.template.library.InvalidTemplateLibrary: Invalid template library specified. ImportError raised when trying to load 'rest_framework.templatetags.rest_framework': cannot import name 'parse_header' from 'django.http.multipartparser' (/usr/local/lib/python3.11/dist-packages/django/http/multipartparser.py)
「corsheaders」パッケージをインストールするときに間違ったコマンドを打ってしまい、Django3.0系統がDjango5.0系になってしまっていた。
エラー文の最後が「(/usr/local/lib/python3.11/dist-packages/django/http/multipartparser.py)」と表示されていたのでdjangoパッケージを確認してみたところ、バージョンが「Django-5.0.1.dist-info」に変わっていました。
対処方法
まずはDjangoを一度アンインストール
Djangoのバージョンを指定してアンインストールしようとしてもうまく行かないのでdjangoパッケージを指定してアンインストールしました。
$ sudo python3.11 -m pip uninstall django
Found existing installation: Django 5.0.1
Uninstalling Django-5.0.1:
Would remove:
/usr/local/bin/django-admin
/usr/local/lib/python3.11/dist-packages/Django-5.0.1.dist-info/*
/usr/local/lib/python3.11/dist-packages/django/*
Proceed (Y/n)? y
Successfully uninstalled Django-5.0.1
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
「django」「Django-5.0.1.dist-info」の両方が消えました。
バージョン3系を再インストール
$ sudo python3.11 -m pip install django==3.0
これでうまくrunserverできるようになりました。
cannot import name ‘parse_header’
django-debug-toolbarをインストールしたら下記のようなエラーが出てしまいました。こちらも上記と原因は一緒でバージョン指定の問題です。
ImportError raised when trying to load ‘rest_framework.templatetags.rest_framework’: cannot import name ‘parse_header’ from ‘django.http.multipartparser’
原因はdjango-debug-toolbarのインストール時にバージョンをしてしなかったので最新のものがインストールされ、同時にDjango REST Framework及びDjangoのバージョンが新しいものに変わってしまったようです。
Django , DRF をアンインストールし、元々入っていたバージョンを指定してインストールしたら正常に動くようになりました。
モデルを作ったのに管理画面に表示されない
下記のようにadmin.pyに記述したのに管理画面に表示されない場合(他のモデルは表示されている状態)の対処方法です。
admin.site.register(models.Company)
この場合はサーバーの再起動を忘れていることが多いです。
$ python manage.py runserver
これで修正されない場合は下記の原因が考えられます。
- アプリを setting.pyのINSTALLED_APPSに登録していない
- makemigrations , migrate が終わっていない
- カスタムユーザーモデルをsetting.pyに登録していない AUTH_USER_MODEL = core.USER
debug_toolbarのエラー
Djangoのdebugツールを入れたら、
?: (2_0.W001) Your URL pattern ‘^__debug__/’ has a route that contains ‘(?P<‘, begins with a ‘^’, or ends with a ‘$’. This was likely an oversight when migrating to django.urls.path().
という警告が表示されました。警告なので使えはしますが、ターミナルに毎回黄色い文字でこの文章が出るのは気持ち悪いので出ないように対処したいと思いました。
原因は urlpatternsの記載がDjango2.0以前のものになっていたことでした。
path(r’^__debug__/’, include(debug_toolbar.urls)),
これを
path(‘__debug__/’, include(debug_toolbar.urls)),
に変更すると警告が消えました。