我很难找到如何使用Django中的re_path正则表达式来匹配一组模式。
我希望将/bucket/
、/buckets/
、/pail/
或/pails
匹配到单个视图。
在我的主urls文件中有:
from bucket import urls as bucket_urls
urlpatterns = [
re_path(r'^(?:bucket)s?/', include(bucket_urls))
]
在bucket.urls
模块中,我有:
urlpatterns = [
path("new", views.BucketCreate.as_view(), name="create_bucket"),
...
path('', BucketList.as_view(selection="recent"), name="buckets")
]
这适用于/bucket/
和/buckets/
,以及/bucket/new/
和/buckets/new/
以及其他从桶扩展而来的urls。
如果我将其更改为'^(?:bucket|pail)s?/'
,则所有的桶或桶urls都无法工作。
如果我将其更改为'^(bucket)s?/'
,则所有存储桶urls都无法工作。如果我正确理解,这是因为()捕获了bucket
部件,而?:
停止了这一点?
试着用这个
urlpatterns = [
re_path(r'^buckets?/', include(bucket_urls)),
re_path(r'^pails?/', include(bucket_urls)),
]
但是给出了以下警告:?: (urls.W005) URL namespace 'bucket' isn't unique. You may not be able to reverse all URLs in this namespace
我该担心那个警告吗?
关于如何将/bucket/
、/buckets/
、/pail/
或/pails/
与单个正则表达式匹配的指针,我不会收到警告吗?
发布于 2020-01-24 22:53:27
您应该只指定不同的命名空间
urlpatterns = [
re_path(r'^buckets?/', include((bucket_urls, "buckets"))),
re_path(r'^pails?/', include((bucket_urls, "pails"))),
]
现在,当您要反转url时,应该添加这个名称空间作为前缀,例如:
reverse( 'buckets:index')
否则,来自桶和桶的urls将发生冲突,而djnago将不会使用kwon wich,因此它将显示此警告。
https://stackoverflow.com/questions/59907011
复制相似问题