Django:为此行从urls.py中的使用“ URL”更改为“ path”(?P <hierarchy>。+)

时间:2018-08-22 14:24:53

标签: python django

我正在使用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(???),  
]

我应该如何以新格式编码最后一行。感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

documentation指定五个路径转换器:intpathstruuidslug

正则表达式模式.+的意思是“ 匹配一个或多个字符”,这些字符可以是任何字符。因此,完全等效的路径转换器是 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

相关问题