我想知道为什么这些网址互相冲突。
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
视图。为什么?如果这不是一个错误,请帮助我理解。
答案 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_perfil
和leyendo_libro_ajax
将始终是其各自网址的第一个匹配项,但任何其他网址仍将与perfil_usuario
的正则表达式匹配。