как переключиться на путь вместо URL в urlpatterns [django]

джанго нуби. Я просматривал учебные пособия, но в шаблонах URL-адресов они используют URL-адрес вместо пути, который теперь представлен в django 2.0. Я хочу, чтобы /appname/anything-gibberish возвращал пользователя к представлению, которое я даю в /appname/

urlpatterns = [
    path('', views.index, name='index'),
    path('contact/', views.contact, name='contact'),
]

я хочу 127.0.0.1:8000/contact/asaskhask перейти к views.contact есть ли способ сделать это без использования URL-адреса и регулярного выражения?


person AJD Ajay Dubey    schedule 23.12.2017    source источник
comment
Я бы справился с этим в вашем методе просмотра, а не только с URL-адресами. Другими словами, проверьте параметр в методе просмотра и, если он не совпадает, перенаправьте на другой URL-адрес.   -  person Jason    schedule 23.12.2017
comment
@Jason, это не сработает, поскольку сопоставление выполняется в самом шаблоне URL. управление переходит на просмотры только в случае успеха   -  person AJD Ajay Dubey    schedule 23.12.2017
comment
почему редирект, а не 404 или какая-то другая страница с ошибкой?   -  person Jason    schedule 23.12.2017


Ответы (2)


Я также работаю над django2 в данный момент. Вам следует подумать о том, чтобы потратить больше времени на документы django.

urlpatterns = [
        path('', views.index, name='index'),
        path('contact/<str:contact_name>/', views.contact, name='contact'),
    ]

здесь str говорит django ожидать строку, так как я ожидаю, что имена не будут иметь цифр или специальных символов. если числа используют его только как <int:contact_number> . или старый добрый slug

Воспользуйтесь этой ссылкой.

О, на всякий случай, если вы пропустите это, больше не будет головной боли для сопоставления uid, pk или токена. все это встроено в django 2.0. даааа

path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('activate/<uidb64>/<token>/', UserActivate.as_view(), name='activate'),
person Vipin Mohan    schedule 24.12.2017

я нашел решение. используя re__path вместо path, вы сможете использовать регулярное выражение

urlpatterns = [
    path('', views.index, name='index'),
    re_path('contact/', views.contact, name='contact'),
]
person AJD Ajay Dubey    schedule 23.12.2017
comment
это неправильно, например: если у вас есть URL-адрес, подобный contact/service_desk/service_guy_name, этот URL-адрес может вызвать проблемы - person Vipin Mohan; 24.12.2017