0

我正在尝试按照 django 教程设置一个简单的 Django 应用程序和 Django 项目,它提供两个 URL: "/" (index) 和 "/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!"))),
)
4

1 回答 1

1

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

给定您的代码,当您转到 时,/testwebDjango 会匹配. 试试。你会看到这个运行。testweb/urls.pyfoo/urls.py/testweb/testweb(lambda x: HttpResponse("testweb!"))

发生这种情况是因为您将两个 URL 都指向include('foo.urls'). 将/testweb/匹配 中的第二个 URL testweb/urls.py,并在其中include查找foo.urls匹配项。由于 之后的 URL 中没有任何内容/testweb/,因此解析器会点击 中的第一个 URL foo.urls,该 URL 用于indexlambda。include不同的 URLConf 或直接引用视图,例如:

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

你会得到你预期的结果。

于 2013-08-21T19:18:24.290 回答