关键字参数

1 投票
3 回答
1652 浏览
提问于 2025-04-17 22:16

我正在尝试不同类型的视图来练习,但在使用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,因为这样更符合标准 :)

撰写回答