我正在使用django2.0,并希望将urls.py的格式从转换为
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list , name='post_list'),
url(r'^(?P<slug>[\w-]+)/$', views.post_detail, name="detail"),
url(r'^category/(?P<hierarchy>.+)/$', views.show_category, name='category'),
]
类似于以下内容:
from django.urls import path
from . import views
app_name='home'
urlpatterns = [
path('', views.post_list, name='post_list'),
path(<slug:slug>/, views.post_detail, name="detail"),
path(???),
]
我应该如何以新格式编码最后一行。感谢您提供的任何帮助。
答案 0 :(得分:2)
documentation指定五个路径转换器:int
,path
,str
,uuid
,slug
。
正则表达式模式.+
的意思是“ 匹配一个或多个字符”,这些字符可以是任何字符。因此,完全等效的路径转换器是 path
:
path
-匹配任何非空字符串,包括路径分隔符'/'
。这样一来,您就可以与完整的URL路径进行匹配,而不仅仅是str
中的URL路径的一部分。
所以您可以这样写:
from django.conf.urls import url
from . import views
urlpatterns = [
path('', views.post_list, name='post_list'),
path('<slug:slug>/', views.post_detail, name="detail"),
path('category/<path:hierarchy>/', views.show_category, name='category'),
]
如果这样的hierarchy
不必 必须匹配斜杠,则可以改用 str
:
str
-匹配任何非空字符串,但路径分隔符'/'
除外。如果表达式中未包含转换器,则为默认设置。
答案 1 :(得分:0)
from django.urls import path
from . import views
app_name='home'
urlpatterns = [
path('', views.post_list , name='post_list'),
path('<slug:slug>/', views.post_detail, name="detail"),
path('category/<path:hierarchy>/', views.show_category, name='category'),
]
@Willem,感谢您引导我给出答案。我仍然有很多东西要学习,并且只能理解文档中的点点滴滴,并且没有python的编程背景。上面的代码对我有用。
@Don,我正在尝试实施此https://github.com/djangopy-org/django_mptt_categories/blob/master/src/blog/urls.py