姜戈。为什么这些网址会冲突?

Django. Why do these urls conflict?

我想知道为什么这些 url 会相互冲突。

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"),

因此,如果我像这样放置 url,我将无法到达名为 leyendo_libro_ajax 的 url,它会转到名为 [=] 的 url 12=]。但是,如果我尝试转到 url editar_perfil(第一个),它会正确地落在 editar_perfil 视图上。为什么?如果这不是错误,请帮助我理解。

Django 按定义的顺序尝试每个模式,returns 第一个视图 url 匹配正则表达式。您最后一个视图 /leyendo_libro_ajax/ 的 url 也与您的 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 将始终是它们各自 url 的第一个匹配项,但任何其他 url 仍将匹配 perfil_usuario