关键字参数
我正在尝试不同类型的视图来练习,但在使用Django 1.5时遇到了以下错误信息:
context = super(HelloTemplate, self).get_context_data(**kwargs)
NameError: global name 'kwargs' is not defined.
这是我项目中的urls.py文件:
urlpatterns = patterns('',
url(r'^hello/$', 'article.views.hello'),
url(r'^hello_template/$', 'article.views.hello_template'),
url(r'^hello_template_simple/$', 'article.views.hello_template_simple'),
url(r'^hello_class_view/$', HelloTemplate.as_view()),
)
这是我的Views.py文件:
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
from django.shortcuts import render_to_response
from django.views.generic.base import TemplateView
def hello(request):
name = 'Mudassar'
html = "<html><body>Hi %s, this seems to worked!</body></html>" % name
return HttpResponse(html)
def hello_template(request):
name = 'Mudassar'
t = get_template('hello.html')
html = t.render(Context({'name': name}))
return HttpResponse(html)
def hello_template_simple(request):
name = 'Mudassar'
return render_to_response('hello.html', {'name':name})
class HelloTemplate(TemplateView):
template_name = 'hello_class.html'
def get_context_data(self, **kwarg):
context = super(HelloTemplate, self).get_context_data(**kwargs)
context['name'] = 'Mudassar'
return context
3 个回答
0
你需要使用你传递的那个变量。
class HelloTemplate(TemplateView):
template_name = 'hello_class.html'
def get_context_data(self, **kwargs):
context = super(HelloTemplate, self).get_context_data(**kwargs)
context['name'] = 'Mudassar'
return context
如果你想用 kwargs
,那就传递 kwargs
;如果你想用 kwarg
,那就要在父类中传递相同的东西。
2
将以下内容替换为:
def get_context_data(self, **kwarg):
context = super(HelloTemplate, self).get_context_data(**kwargs)
context['name'] = 'Mudassar'
return context
替换成:
def get_context_data(self, **kwargs):
context = super(HelloTemplate, self).get_context_data(**kwargs)
context['name'] = 'Mudassar'
return context
:) :P
4
因为在 get_context_data
这个函数里,参数叫做 kwarg
,而你用的是 kwargs
(复数形式)。
我建议你用复数形式的 kwargs
,因为这样更符合标准 :)