gpt4 book ai didi

python - 在 Django 3.0 中将任一模式与 re_path 匹配

转载 作者:行者123 更新时间:2023-12-01 00:07:03 30 4
gpt4 key购买 nike

我正在努力弄清楚如何在 Django 中使用带有 re_path 的正则表达式来匹配一组模式中的任何一个。

我想要匹配 /bucket//buckets//pail//pails到单个 View 。

在我的主网址文件中,我有:

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/ 以及从存储桶扩展的其他 URL。

如果我将其更改为 '^(?:bucket|pail)s?/',则所有存储桶或桶 URL 都不起作用。

如果我将其更改为 '^(bucket)s?/',则所有存储桶 url 都不起作用。如果我理解正确的话,这是因为 () 正在捕获 bucket 部分,而 ?: 会停止它?

试试这个有效

urlpatterns = [
re_path(r'^buckets?/', include(bucket_urls)),
re_path(r'^pails?/', include(bucket_urls)),
]

但给出此警告:?: (urls.W005) URL 命名空间“bucket”不是唯一的。您可能无法反转此命名空间中的所有 URL

我应该担心这个警告吗?

有关如何匹配 /bucket//buckets//pail//pails/的任何指示 使用单个正则表达式,这样我就不会收到警告?

最佳答案

将正则表达式更改为以下内容:r'^[(bucket|pail)s]+/'

from django.urls import include, re_path

urlpatterns = [
...,
re_path(<b>r'^[(bucket|pail)s]+/', include(bucket_urls)</b>),
...
]
<小时/>

要解决 (urls.W005) 警告,请指定 namespace include(...) (Django doc) 的参数功能

urlpatterns = [
re_path(r'^buckets?/', include((bucket_urls, <b>namespace='buckets'</b>))),
re_path(r'^pails?/', include((bucket_urls, <b>namespace='pails'</b>))),
]

关于python - 在 Django 3.0 中将任一模式与 re_path 匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59907011/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com