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

时间:2018-01-29 15:27:02

标签: python django

这对你们来说应该是一个容易解决的问题: 我刚开始使用Django,我正在做一些路由。这是项目根目录中的urls.py

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('dashboard.urls')),
]

这是我dashboard app中的路由:

urlpatterns = [
    path('dashboard', views.index, name='index'),
    path('', views.index, name='index'),
]

现在让我们说如果他们转到网站的根目录,我希望我的用户被重定向到/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 '/'.

因此,我尝试使用'/'代替'',但由于自动从网址中删除了/,因此该网址与该模式不匹配。我应该忽略/静音这个警告还是有另一种方法可以解决这个问题?

这段代码完美无缺但之前给了我一个警告:

urlpatterns = [
    path('/dashboard', views.index, name='index'),
    path('', views.index, name='index'),
]


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('dashboard.urls'))
]

2 个答案:

答案 0 :(得分:1)

您可以使用RedirectView/重定向到/dashboard/。然后在包含信息中心网址时使用'dashboard'

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', RedirectView.as_view(pattern_name='dashboard:index')
  path('dashboard/', include('dashboard.urls')),
]

然后,您可以从'dashboard'中的路径中移除dashboard/urls.py,因为它已在include()中。

app_name = 'dashboard'

urlpatterns = [
    path('', views.index, name='index'),
]

我已添加app_name='dashboard'以匹配上面pattern_name='dashboard:index'中使用的命名空间。

请注意,Django项目通常使用带有斜杠的URL,例如: /dashboard/代替dashboard

如果您真的想使用/dashboard之类的网址而不使用尾部斜杠,那么include应为

path('dashboard', include('dashboard.urls')),

如果您这样做,我建议您在设置中将APPEND_SLASH设置为False

答案 1 :(得分:-1)

您可以尝试这样的事情:

from django.conf import settings
from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import RedirectView

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^contacts/', include('appname.contacts.urls')),
    url(r'^comments/', include('appname.urls')),
    url(r'^subscriptions/', include('appname.partner.urls')),
    url(r'^', RedirectView.as_view(url="/admin/"))
]

这是我在我的项目中所做的,所以每当用户转到127.0.0.1:8000时,它都会重定向到/admin