我是Django的新手,我在Django URL调度程序方面遇到了一些问题。
我有“prometfire”项目和“主页”应用程序。
我的目标是将这些路径连接到他们的视图功能:
127.0.0.1:8000 - > “homepage_view”
127.0.0.1:8000/welcome - > “welcome_view”
“homepage_view”工作正常,但是当我转到127.0.0.1:8000/welcome时,我的结果与“homepage_view”相同,而不是“welcome_view”结果。
我错过了什么吗?
Django 1.5 Python 2.7
#urls.py in prometfire
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', include('homepage.urls')),
url(r'^welcome/', include('homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)
#urls.py in homepage app
from django.conf.urls import patterns, include, url
urlpatterns = patterns('homepage.views',
url(r'^$', 'homepage_view'),
url(r'^welcome/', 'welcome_view'),
)
#views.py in homepage app
from django.shortcuts import render_to_response
from django.http import HttpResponse
def homepage_view(request):
return render_to_response('homepage.html',
{'name': 'bob'}
)
def welcome_view(request):
return HttpResponse('Welcome')
答案 0 :(得分:2)
您的问题是您要包含两次主页网址。删除第二个条目
url(r'^welcome/', include('homepage.urls')),
上的文档对此进行了解释
每当Django遇到include()(django.conf.urls.include())时,它会删除与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf以进行进一步处理。
在您的情况下,'welcome/'
会从网址中删除,其中会留下''
,该网址与主页的网址格式相匹配。
答案 1 :(得分:0)
这是因为它永远不会进入应用的第二个条件,它会在网址root conf, welcome/
验证条件,然后直接转到应用中的^$
。解决方案是从网址welcome/
中移除root
。
第一个欢迎定义是多余的,并导致“错误”。