无法让Django App提供正确的URL

时间:2013-08-21 19:14:13

标签: python regex django django-urls

我正在尝试按照django教程设置一个简单的Django App和Django Project,它提供两个URL:“/”(索引)和“/ testweb”。

如果我导航到http://localhost:8000/testweb,我会看到“索引!”而不是“testweb!” 。我做错了什么?

我的项目名为testweb,我的应用名为foo。这是testweb/urls.py

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    url(r'^$', include('foo.urls')),
    url(r'^testweb/', include('foo.urls')),
)

这里是foo/urls.py

from django.conf.urls import patterns, url
from django.http import HttpResponse
from foo import views

urlpatterns = patterns('',
    url(r'^$', (lambda x: HttpResponse("index!"))),
    url(r'^testweb/', (lambda x: HttpResponse("testweb!"))),
)

1 个答案:

答案 0 :(得分:1)

  

正如我所说,django正在为两个URL运行index()。

根据您的代码,当您转到/testweb时,Django会匹配testweb/urls.py的第二行,然后匹配foo/urls.py中的第一行。试试/testweb/testweb。你会看到它运行(lambda x: HttpResponse("testweb!"))

这种情况正在发生,因为您将两个网址都指向include('foo.urls')。转到/testweb/会匹配testweb/urls.py中的第二个网址,以及includefoo.urls,并在那里查找匹配项。由于您在/testweb/之后的网址中没有任何内容,因此解析程序会点击foo.urls中的第一个网址,即index lambda。 include不同的URLConf或直接引用视图,例如:

# testweb/urls.py
urlpatterns = patterns('',
    url(r'^$', (lambda x: HttpResponse("index!")), name='index'),
    url(r'^testweb/', (lambda x: HttpResponse("testweb!")), name='testweb'),
)

您将获得预期的结果。