Как отличить 1 необязательный параметр и 1-е имя функции в Django - PullRequest
0 голосов
/ 01 октября 2019

Допустимы следующие URL:

//localhost/
//localhost/123
//localhost/hello/
//localhost/hello/456

url.py

url(r'^$', views1.custom1, name='custom1'),
url(r'^(?P<param1>.+)/$', views1.custom1, name='custom1'),
url(r'^hello/$’, views2.custom2, name='custom2’),
url(r'^hello/(?P<param2>.+)/$', views2.custom2, name='custom2’),

view1.py

def custom1(request, param1=''):

view2.py

def custom2(request, param2=''):

Для url // localhost / hello / функция custom1 () отвечает с неправильным param1 = 'hello!

Следующие 2 URL не могут быть различены.

url(r'^(?P<param1>.+)/$', views1.custom1, name='custom1'),
url(r'^hello/$’, views2.custom2, name='custom2’),

Как это исправить?

1 Ответ

1 голос
/ 01 октября 2019

Если вы посмотрите документы Django для URL , вы увидите следующее:

Django проходит по каждому шаблону URL по порядку и останавливается на первом, соответствующем запрошенному URL.

Это означает, что на первом соответствующем URL Django перестанет искатьи передайте запрос в соответствующий вид. localhost/hello/ является допустимым шаблоном для регулярного выражения '^(?P<param1>.+)/$'

Чтобы это исправить, просто измените порядок url_patterns следующим образом:

url(r'^$', views1.custom1, name='custom1'),
url(r'^hello/$’, views2.custom2, name='custom2’),
url(r'^hello/(?P<param2>.+)/$', views2.custom2, name='custom2’),
url(r'^(?P<param1>.+)/$', views1.custom1, name='custom1'),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...