所以从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')
谢谢
答案 0 :(得分:3)
通过使用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')
]
您可以使用行为与{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')
]
以前版本的
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')