Отправлять запрос на url, если он совпадает, иначе отправлять его на параметризованный url в django
urls.py
urlpatterns = [
re_path(r'^([-\w]{3,})/$', shop_from_url, name='shop_from_url'),
path('ckeditor/', include('ckeditor_uploader.urls')),
path('', include('products.urls')),
path('authenticate/', include('authenticate.urls')),
path('order/', include('order.urls')),
path('offers/', include('offers.urls')),
path('event/', include('event.urls')),
path('product_upload/', include('product_upload.urls')),
path('restaurant/', include('restaurant.urls')),
path('shop/', include('store.urls')),
]
У меня есть такой шаблон url. Если вы посмотрите на первый и второй url путь, то они абсолютно одинаковы по написанию. разница только в том, что первый url это параметризованный url, а остальные это жестко закодированные url.
Но на самом деле, когда я вызываю любой из url, первый url также вызывается.
Мне нужно проверить, есть ли какой-либо существующий url (например authenticate/, product_upload/), совпадающий с любым из url приложения, тогда он должен перенаправить на него, иначе он должен вызвать re_path(r'^([-\w]{3,})/$') (первый url) этот url
Есть ли способ вызвать первый url (который находится в этом шаблоне) только тогда, когда url не соответствует другим url.
Примечание: Я не могу изменить урлы, так как это требование.
Вы должны расположить ваши урлы в порядке проверки логики. Согласно документации Django (https://docs.djangoproject.com/en/4.0/topics/http/urls/#how-django-processes-a-request):
Django просматривает каждый шаблон URL по порядку и останавливается на первом, который соответствует запрошенному URL, сравнивая с path_info.
urlpatterns = [
path('ckeditor/', include('ckeditor_uploader.urls')),
path('authenticate/', include('authenticate.urls')),
path('order/', include('order.urls')),
path('offers/', include('offers.urls')),
path('event/', include('event.urls')),
path('product_upload/', include('product_upload.urls')),
path('restaurant/', include('restaurant.urls')),
path('shop/', include('store.urls')),
re_path(r'^([-\w]{3,})/$', shop_from_url, name='shop_from_url'),
path('', include('products.urls'))
]