Url django 中的配置始终执行相同的视图

Url configuration in django always executs the same view

我想实现以下行为

  1. http://localhost/ 在我的应用程序中运行索引视图
  2. http://localhost/myview 在我的应用程序中运行 myview

所以在主要 urls.py 我有以下设置

urlpatterns = [
    url(r"^", include("myapp.urls")),
    url(r"^admin/", include(admin.urls)),
]

在我的应用程序中 urls.py

urlpatterns = [
    url(r'$', "myapp.views.index"),
    url(r'myview/$', "myapp.views.myview")
]

但是两个链接都执行索引视图,而 myview 从未执行过。我错过了什么吗?

您应该在应用的开头添加一个 ^ URL 模式:

urlpatterns = [
    url(r'^$', "myapp.views.index"),
    url(r'^myview/$', "myapp.views.myview")
]

请修改您的代码以反映在下面

所以在主要 urls.py

urlpatterns = [
    url(r"^$", include("myapp.urls")),
    url(r"^admin/", include(admin.urls)),
]

在我的应用程序中 urls.py

urlpatterns = [
    url(r'^$', "myapp.views.index"),
    url(r'^myview/$', "myapp.views.myview")
]

它会起作用

来自Django documentation: URL dispatcher: How Django processes a request

  1. Django runs through each URL pattern, in order, and stops at the first one that matches the requested URL.

因此,模式的顺序很重要。另外,您的模式太宽泛了。

实际上,正则表达式 $ 无限匹配,因此它首先匹配索引页。

尝试在 ^$^myview/$.

之前使用 ^ 来限制它们