1

我是 Django 新手,我对 Django URL 调度程序有一些问题。

我有“prometfire”项目和“主页”应用程序。

我的目标是将此路径连接到他们的视图功能:

127.0.0.1:8000 --> "主页视图"

127.0.0.1:8000/欢迎 --> "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')
4

2 回答 2

2

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

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

这在包含其他 url confs的文档中进行了解释

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

在您的情况下,'welcome/'从 url 中删除 ,留下'',它与主页的 url 模式匹配。

于 2013-06-16T13:24:51.833 回答
0

那是因为它从不进入应用程序的第二个条件,它在 url 处验证条件root conf, welcome/,然后直接进入^$应用程序。一个解决方案是welcome/从 url中删除root。第一个受欢迎的定义是多余的,并导致“错误”。

于 2013-06-16T13:26:29.697 回答