对于你们来说,这应该是一个很容易解决的问题:我刚刚开始使用 Django,并且正在做一些路由。这是我urls.py在项目的根目录中:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('dashboard.urls')),
]
Run Code Online (Sandbox Code Playgroud)
这是我的路由dashboard app:
urlpatterns = [
path('dashboard', views.index, name='index'),
path('', views.index, name='index'),
]
Run Code Online (Sandbox Code Playgroud)
现在假设我希望我的用户/dashboard在访问网站的根目录时被重定向到。所以我会使用''作为根中的路由urls.py,然后让每个人都/dashboard从urls.py中发送到dashboard app。但是当我这样做时,我收到以下警告:
?: (urls.W002) Your URL pattern '/dashboard' [name='index'] has a route beginning with a '/'. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'.
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用'/'代替'',但由于尾部/会自动从 url 中删除,因此 url 与模式不匹配。我应该忽略/静音这个警告还是有其他方法可以解决这个问题?
这是运行完美的代码,但之前给了我一个警告:
urlpatterns = [
path('/dashboard', views.index, name='index'),
path('', views.index, name='index'),
]
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('dashboard.urls'))
]
Run Code Online (Sandbox Code Playgroud)
您可以使用RedirectView重定向从/到/dashboard/。'dashboard'然后在包含仪表板 URL 时使用。
urlpatterns = [
path('admin/', admin.site.urls),
path('', RedirectView.as_view(pattern_name='dashboard:index')
path('dashboard/', include('dashboard.urls')),
]
Run Code Online (Sandbox Code Playgroud)
然后您可以'dashboard'从 中的路径中删除dashboard/urls.py,因为它已经在include().
app_name = 'dashboard'
urlpatterns = [
path('', views.index, name='index'),
]
Run Code Online (Sandbox Code Playgroud)
我添加了app_name='dashboard'与上面使用的命名空间相匹配的pattern_name='dashboard:index'.
请注意,Django 项目通常使用带有尾部斜杠的 URL,例如,而/dashboard/不是dashboard.
如果您确实想使用/dashboard不带尾部斜杠的 URL,那么包含应该是
path('dashboard', include('dashboard.urls')),
Run Code Online (Sandbox Code Playgroud)
如果您这样做,我建议您在设置中进行APPEND_SLASH设置。False