【Django】cannot import name ‘url’ from ‘django.conf.urls’ エラーの原因と対処法

urlをimportする際に発生するエラーの対処法解説ページアイキャッチ

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.urlsDjango本体のトップフォルダ/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 に変更する必要があります)。

修正後(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 の作りが変わっていなければ)。

url関数
def url(regex, view, kwargs=None, name=None):
    return re_path(regex, view, kwargs, name)

また、おそらく re_pathpath の違いは第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 を利用している方は、こういったバージョン違いによるエラーにも出くわすことが多いと思いますので注意してください。こういったエラーが発生した際には、また記事にして情報共有していこうと思います!

同じカテゴリのページ一覧を表示

コメントを残す

メールアドレスが公開されることはありません。