请帮助配置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'),
)
答案 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支持的站点请求页面时,这是系统遵循的算法,以确定要执行的Python代码:
Django确定要使用的根URLconf模块。通常,这是ROOT_URLCONF设置的值,但如果传入的HttpRequest对象具有名为urlconf的属性(由中间件请求处理设置),则将使用其值代替ROOT_URLCONF设置。
Django加载Python模块并查找变量 urlpatterns的。这应该是一个Python列表,格式为 函数django.conf.urls.patterns()。
Django按顺序运行每个URL模式,并在匹配请求的URL的第一个模式停止。
一旦其中一个正则表达式匹配,Django就会导入并调用给定的视图,这是一个简单的Python函数(或基于类的视图)。 视图传递以下参数:HttpRequest的实例。如果匹配的正则表达式未返回任何命名组,则正则表达式中的匹配项将作为位置参数提供。关键字参数由正则表达式匹配的任何命名组组成,并由在其中指定的任何参数覆盖。 django.conf.urls.url()的可选kwargs参数。
如果没有正则表达式匹配,或者在此过程中的任何点期间引发异常,Django会调用适当的错误处理视图。请参阅下面的错误处理。
在你的情况下,Django会调用函数mysite.views.base_page(request, 'page1')
,发生错误。