我正在尝试按照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!"))),
)
答案 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
中的第二个网址,以及include
个foo.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'),
)
您将获得预期的结果。