«Любой» путь в Джанго?

#reactjs #django

Вопрос:

Можно ли определить маршрут, на который будет перенаправлен, если Django не сможет найти совпадение в определенных URL-адресах?

Например, допустим, у меня есть:

 urlpatterns = [
    path('ajaxlogin', views.ajax_login, name='ajaxlogin'),
    path('ajaxprofile', views.ajax_profile, name='ajaxprofile'),
]
 

Могу ли я определить «динамический» URL-адрес определенного представления, на который будет перенаправляться, если путь не существует? Предположим , я ввожу URL /ajaxsignup -адреса и /ajaxdelete , которые не определены, но перенаправлены на URL-адрес определенного представления?

Другими словами:

 urlpatterns = [
    path('ajaxlogin', views.ajax_login, name='ajaxlogin'),
    path('ajaxprofile', views.ajax_profile, name='ajaxprofile'),
    path('every-other-url', views.another_view, name='path-everything-else'),
]
 

Я знаю, что есть обработчики ошибок Django, но есть ли другие способы добиться этого? Мой интерфейс основан отдельно на приложении React, поэтому я был бы очень признателен за «динамический» URL-адрес, а не за использование 404 ответов Django по умолчанию.

Я подозреваю, что если path бы не смог этого сделать, я мог бы использовать старое url с регулярным выражением-но я все еще понятия не имею.

Заранее спасибо.

Комментарии:

1. не будет ли re_path работать с подстановочным знаком в конце вашего списка URL-шаблонов?

2. @Trent не могли бы вы уточнить (или, возможно, опубликовать ссылку на документацию или что-то в этом роде)?

3. Да, я нашел документацию здесь , но не могли бы вы, пожалуйста, рассказать мне, как исключить два указанных выше URL-адреса? Или re_path справится с этим?

Ответ №1:

Просто добавьте подстановочный знак re_path в конце ваших URL-шаблонов:

 from django.http import HttpResponse
from django.urls import re_path

def http_response(request):
    return HttpResponse('<h1>Hello HttpResponse</h1>')

urlpatterns = [
    path('ajaxlogin', views.ajax_login, name='ajaxlogin'),
    path('ajaxprofile', views.ajax_profile, name='ajaxprofile'),
    path('every-other-url', views.another_view, name='path-everything-else'),
    re_path(r'.*', http_response), # only if the above routes don't trigger a match
]
 

Он обрабатывает маршруты по порядку, поэтому, если он не найдет маршрут до того, как попадет в подстановочный знак, он вернет его.

Комментарии:

1. Могу http_response ли я заменить определенный вид?

2. Ты можешь делать там все, что захочешь. Я просто хотел привести вам рабочий пример, который вы могли бы подключить к своему django urls.py и проверить.