Я изо всех сил пытаюсь понять, как использовать регулярное выражение с re_path в Django, чтобы соответствовать любому из набора шаблонов.
Я хочу соответствовать /bucket/
, /buckets/
, /pail/
или /pails
для одного представления.
В моем основном файле URL-адресов у меня есть:
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 namespace 'bucket' isn't unique. You may not be able to reverse all URLs in this namespace
Стоит ли беспокоиться об этом предупреждении?
Есть ли какие-либо указатели на то, как я может сопоставить /bucket/
, /buckets/
, /pail/
или /pails/
с одним регулярным выражением, чтобы я не получил предупреждение?