如何分析地址?

时间:2014-04-02 06:26:14

标签: python django

请帮助配置urls.py

我网站的根页

mysite.com/

包含对子页面的几个引用

mysite.com/page1/
mysite.com/page2/
mysite.com/page3/

urls.py我设置如下:

urlpatterns = patterns ('',
url (r '^ blog /', include ('blog.urls')),
url (r '^ admin /', include (admin.site.urls)),
    url (r '^ (. *) /', 'mysite.views.base_page', name = 'base_page'),
    url (r '^ $', 'mysite.views.base_page', name = 'base_page'),
)

view.py:

from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.template import loader, RequestContext


def base_page(request):
    t = loader.get_template('base_page.html')
    c = RequestContext(request, {})
    return HttpResponse(t.render(c))  

因此,当我转向mysite.com/page1/时,我收到以下错误消息:

base_page () takes one positional argument but were given 2
Exception Type: TypeError
Exception Value:
base_page () takes one positional argument but were given 2
Exception Location: C: \ Python33 \ lib \ site-packages \ django \ core \ handlers \ base.py in get_response, line 114

PS 值得注意的是,不要得到上述错误:

urlpatterns = patterns('',
    url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    #url(r'^(.*)/', 'mysite.views.base_page', name='base_page'),
    url(r'^$', 'mysite.views.base_page', name='base_page'), 
)

1 个答案:

答案 0 :(得分:2)

错误解释了,争论太多了。

base_page () takes one positional argument but were given 2

当你加载页面mysite.com/page1/时,django逐个搜索url模式并加载匹配的第一个,在本例中是以下行:

url(r'^(.*)/', 'mysite.views.base_page', name='base_page'),

问题是django如何将参数传递给视图。根据{{​​3}}:

Django如何处理请求

当用户从Django支持的站点请求页面时,这是系统遵循的算法,以确定要执行的Python代码:

  1. Django确定要使用的根URLconf模块。通常,这是ROOT_URLCONF设置的值,但如果传入的HttpRequest对象具有名为urlconf的属性(由中间件请求处理设置),则将使用其值代替ROOT_URLCONF设置。

  2. Django加载Python模块并查找变量 urlpatterns的。这应该是一个Python列表,格式为 函数django.conf.urls.patterns()。

  3. Django按顺序运行每个URL模式,并在匹配请求的URL的第一个模式停止。

  4. 一旦其中一个正则表达式匹配,Django就会导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。 视图传递以下参数:HttpRequest的实例。如果匹配的正则表达式未返回任何命名组,则正则表达式中的匹配项将作为位置参数提供。关键字参数由正则表达式匹配的任何命名组组成,并由在其中指定的任何参数覆盖。 django.conf.urls.url()的可选kwargs参数。

  5. 如果没有正则表达式匹配,或者在此过程中的任何点期间引发异常,Django会调用适当的错误处理视图。请参阅下面的错误处理。

  6. 在你的情况下,Django会调用函数mysite.views.base_page(request, 'page1'),发生错误。