Django 2.0中的网址映射

时间:2018-08-20 07:59:52

标签: python django

所以从Django 1.9迁移到Django 2对我来说并不顺利。我已经了解了网址格式。

Django 2.0使用path代替URL,如何将这些URL模式转换为与Django 2.0兼容?

url(r'^post/(?<pk>\d+)$',)views.PostDetailView.as_view(), name ='post_detail'),

url('account/login/', views.login, name ='login')

谢谢

2 个答案:

答案 0 :(得分:3)

方法1

通过使用path()

from django.urls import path

urlpatterns = [
    path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
    path('account/login/', views.login, name='login')
]

方法2

您可以使用行为与{strong> url() 相同的re_path()

from django.urls import re_path

urlpatterns = [
    re_path(r'^post/(?<pk>\d+)$', views.PostDetailView.as_view(), name='post_detail'),
    re_path(r'account/login/', views.login, name='login')
]


方法3

从文档(What’s new in Django 2.0

  

以前版本的django.conf.urls.url()函数现在可以作为django.urls.re_path()使用。保留旧位置是为了向后兼容,而不即将淘汰。旧的django.conf.urls.include()函数现在可以导入from django.urls,因此您可以在URLconf中使用 from django.urls import include, path, re_path


因此,您可以从较旧的位置在url()中使用相同的 django 2.x 功能(直到完全折旧),

from django.conf.urls import url

urlpatterns = [
    url(r'^post/(?<pk>\d+)$', views.PostDetailView.as_view(), name='post_detail'),
    url('account/login/', views.login, name='login')
]

答案 1 :(得分:2)

Django 2.0 release notes涵盖了您的情况(不完全是,但无论如何)-您的网址可以按以下方式重写(假设您的意思是(?P<pk>\d+)-注意P之后的? ):

path('post/<int:pk>/', views.PostDetailView.as_view(), name='post_detail'),
path('account/login/', views.login, name='login')