Django を勉強していて下記のエラーが発生して困ったので、備忘録の意味も込めて対処法をまとめておきます。
cannot import name 'url' from 'django.conf.urls'
エラーの原因
このエラーが発生するスクリプトの例は下記になります(urls.py
に書くとエラーになった)。
1行目の import
でエラーになります。
from django.conf.urls import url
from . import views
urlpatterns = [
url('', views.index, name='index'),
]
このエラーが発生する原因は、django.conf.urls
(Django本体のトップフォルダ/conf/urls/__init__.py
) に url
という関数が見つからないからです。なぜ見つからないかというと、 Django 4 にバージョンアップされた際に url
関数が削除されたからです。
どうも、古い Django には上記の url
という関数が定義されていたようですが、Django 4 になって url
関数が削除されたようです。
なので、古いバージョンの Django を利用されている方であれば、上記のスクリプトように from django.conf.urls import url
を行なってもエラーになりませんが、Django 4 を利用されている方であれば from django.conf.urls import url
を行うとエラーが発生することになります。
こういった理由で発生するエラーですので、Django 4 を使っているのに古いバージョン(例えば Django 3)を対象とした参考書やウェブページを参考にして Django を勉強している場合に発生しやすいエラーであると言えます。私はまさにコレ。
対処法
url
関数の代わりに path
関数や re_path
関数を利用することで解決できます。
例えば エラーの原因 で紹介した下記のスクリプトであれば、
from django.conf.urls import url
from . import views
urlpatterns = [
url('', views.index, name='index'),
]
下記のように1行目を from django.urls import path
に変更し、url
関数を使用していたところを path
関数に置き換えればエラーが解決できます。
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
re_path
を使いたい場合は、上記の path
部分を re_path
に変更すれば良いです(import
とするのも re_path
に変更する必要があります)。
from django.urls import re_path
from . import views
urlpatterns = [
re_path('', views.index, name='index'),
]
Django 3.0.4 で確認した感じだと、元々 url
関数の定義は下記のようになっており、結局 re_path
が実行されているようでした。ですので、re_path
に置き換えてしまえば、元々の url
関数と同じ動作になると思います(バージョンアップによって re_path
の作りが変わっていなければ)。
def url(regex, view, kwargs=None, name=None):
return re_path(regex, view, kwargs, name)
また、おそらく re_path
と path
の違いは第1引数で正規表現が利用できるかどうかの違いだと思います。ですので、元々 url
関数の第1引数で正規表現が利用されている場合は re_path
を、そうでないなら path
に置き換えるのでも良いと思います。
スポンサーリンク
まとめ
このページでは、Django 利用時に下記のエラーが発生した時の原因と対処法について解説しました!
cannot import name 'url' from 'django.conf.urls'
原因は Django 4 では url
関数が削除されているからであり、Django 4 で古いバージョンの Django 向けに作成されたスクリプトを実行する際に発生しやすいエラーになると思います。
url
関数の代わりに re_path
関数や path
関数を利用することで解決することができますし、こういったエラーを経験したくないのであれば、教材で使用されているバージョンに合わせて Django を再インストールするのもありだと思います。
特に最新のバージョンの Django を利用している方は、こういったバージョン違いによるエラーにも出くわすことが多いと思いますので注意してください。こういったエラーが発生した際には、また記事にして情報共有していこうと思います!