Memo:[Django]バージョンによるurls.py内のincludeの仕様の違い
概要
Urlディスパッチャの記述でハマった。
問題
旧DjangoのTutorialでは、下記のようにしなければならなかった。
urlpatterns = [ url(r'^testapp/', include('testapp.urls', namespace='testapp')), ]
新しいDjangoで上記を写経すると下記のエラーがでる。(Django==2.0.3を使用)
url(r'^testapp/', include('testapp.urls', namespace='testapp')), File "C:\Users\****\PycharmProjects\Tutorial\venv\lib\site-packages\django\urls\conf.py", line 39, in include 'Specifying a namespace in include() without providing an app_name ' django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.
'Specifying a namespace in include() without providing an app_name '
Googleさん:'app_nameを指定せずにinclude()で名前空間を指定する'
解決策
新Django(Django==2.0.3)では、下記のようにすることでエラーをはかなくなった。
要するに、namespaceでapp_nameを指定するのではなく、2-タプルで渡してね。ってことみたい。
urlpatterns = [ url(r'^testapp/', include(('testapp.urls', 'testapp'),)), ]