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

时间:2015-06-04 09:09:21

标签: django django-urls

我想实现以下行为

  1. http://localhost/在我的应用中运行索引视图
  2. http://localhost/myview在我的应用中运行myview
  3. 所以在主urls.py中我有以下设置

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

    和myapp urls.py

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

    但两个链接都执行索引视图,myview永远不会执行。我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

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

所以在主urls.py

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

和myapp urls.py

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

它会起作用

答案 1 :(得分:1)

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

  
      
  1. Django按顺序遍历每个URL模式,并在第一个匹配请求的URL的位置停止。
  2.   

因此,模式的顺序很重要。此外,您的模式过于宽泛。

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

尝试使用^之前限制它们:^$^myview/$

答案 2 :(得分:0)

您应该在应用网址模式的开头添加^

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