Django url调度程序 - 错误的功能

时间:2013-06-16 13:16:02

标签: python django django-urls

我是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')

2 个答案:

答案 0 :(得分:2)

您的问题是您要包含两次主页网址。删除第二个条目

url(r'^welcome/', include('homepage.urls')),

including other url confs

上的文档对此进行了解释
  

每当Django遇到include()(django.conf.urls.include())时,它会删除与该点匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf以进行进一步处理。

在您的情况下,'welcome/'会从网址中删除,其中会留下'',该网址与主页的网址格式相匹配。

答案 1 :(得分:0)

这是因为它永远不会进入应用的第二个条件,它会在网址root conf, welcome/验证条件,然后直接转到应用中的^$。解决方案是从网址welcome/中移除root。 第一个欢迎定义是多余的,并导致“错误”。