Отправлять запрос на 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'))
]
Вернуться на верх