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

标签 python regex django

我正在努力弄清楚如何在 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/

相关文章:

python - Django on_delete=models.SET 返回Model或级联删除

python - Python 中的二进制线性规划求解器

用于连接的 Python 正则表达式替代方案

离线数据库插入期间的django内存泄漏

javascript - 在 javascript 中查找正则表达式电话号码并将其替换为可调用链接

php - PCRE 能否测试主题中任何位置(字符类)出现的总数?

django - 如何在 Django 中执行 DB 按位查询?

Python weave编译错误

python - 将 pandas DataFrame 列添加到行的最佳方法

python - Q : Django - how to return data from other function on views. py