Django url 模式,从根重定向到其他 url

Sna*_*low 2 python django

对于你们来说,这应该是一个很容易解决的问题:我刚刚开始使用 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,然后让每个人都/dashboardurls.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)

Ala*_*air 6

您可以使用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