#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 и проверить.