在根目录下的urls.py中使用了include方法,并且使用了namespace参数:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('book.urls', namespace='book')),
]
在启动项目时,会报错:
File "/home/vubuntu/PycharmProjects/pythonProject/bookmanager/urls.py", line 21, in
path('', include('book.urls', namespace='book')),
File "/home/vubuntu/PycharmProjects/pythonProject/venv/lib/python3.8/site-packages/django/urls/conf.py", line 42, in include
raise ImproperlyConfigured(
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.
这是因为django2相对于django1做了改动,在include函数里增加了参数app_name,表示app的名字。
两种解决方法:
- 在include中传入该app的名字(第二个参数),即
path('', include(('book.urls','book'), namespace='book')),
- 在每一个app的urls.py文件中添加app_name变量,即
from django.contrib import admin
from django.urls import re_path, include
from book import views
app_name = 'book'