Django 複数のアプリを持たせる場合URL名に名前空間を設定する方が幸せになれる

Djangoのurl.pyで各URL設定にname=”を使って名前をつけておくと他から呼びだす時に便利ですが、url.pyにapp_name=”で名前空間までついでに設定しておくとアプリを複数を持たせるプロジェクト構成なら余計なエラーに悩まされなくて吉なようです。

私の場合はテンプレートから別のアプリで定義してあるURLを名前空間なしかつ引数あり({% url ‘url_name’ XXX.id %})で参照しようとした時に「Reverse for ‘XXX’ with no arguments not found」というようにエラーが出て詰まりました。しかも引数なしだとそれまで問題なかったので検討違いの原因調査をしてしまっていました。

このエラーはURL名に名前空間をつければ解消できたのですが、一旦名前空間をつけると名前空間を設定したurls.pyに書かれたURL全て名前空間を付けてアクセスしないと「Reverse for ‘XXX’ not found」というエラーが出るので注意が必要です。

公式サイトのチュートリアルよりURL名前空間について以下抜粋

url名前空間定義

URL名前空間呼び出し