Django的。为什么这些网址会发生冲突?

时间:2015-10-14 21:28:17

标签: django django-urls

我想知道为什么这些网址互相冲突。

urls.py:

url(r'^editar_perfil/$', views.editar_perfil, name="editar_perfil"),

url(r'^(?P<username>[-\w.]+)/$', views.perfil_usuario, name="perfil_usuario"),
url(r'^leyendo_libro_ajax/$', views.leyendo_libro_ajax, name="leyendo_libro_ajax"),

因此,如果我将这些网址放置在我无法访问名为leyendo_libro_ajax的网址的位置,则会转到名为perfil_usuario的网址。但是,如果我尝试转到网址editar_perfil(第一个),它会正确登陆editar_perfil视图。为什么?如果这不是一个错误,请帮助我理解。

1 个答案:

答案 0 :(得分:3)

Django按照定义的顺序尝试每个模式,并返回url与正则表达式匹配的第一个视图。您上一次观看的网址/leyendo_libro_ajax/也与perfil_usuario视图的正则表达式相匹配。由于这是第一场比赛,这就是Django使用的观点。

要让这些视图共存,您需要将最后一个视图移到第二个视图上方:

url(r'^editar_perfil/$', views.editar_perfil, name="editar_perfil"),
url(r'^leyendo_libro_ajax/$', views.leyendo_libro_ajax, name="leyendo_libro_ajax"),
url(r'^(?P<username>[-\w.]+)/$', views.perfil_usuario, name="perfil_usuario"),

这样,editar_perfilleyendo_libro_ajax将始终是其各自网址的第一个匹配项,但任何其他网址仍将与perfil_usuario的正则表达式匹配。