0

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(位于此模式中)。

注意:我不能更改网址,因为这是一项要求。

4

1 回答 1

1

您应该将您的网址放在逻辑检查顺序中。根据 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'))
]
于 2022-02-15T08:57:11.863 回答