django classbased视图不接受view_args和view_kwargs

时间:2017-06-22 13:09:47

标签: python django django-views django-middleware

我正在使用django 1.8。我在我的一个视图中使用django.views.generic.View类。

class CommonView(View):
    func_name = 'view_func'
    http_method_names = ["get", "post"]
    def get(self, request, *args, **kwargs):
        return render(request, 'template.html', {})

在urls.py中我添加了

url(r'^common/$',CommonView),

我编写了一个中间件,我正在使用视图响应和覆盖process_view方法进行一些工作

class CommonMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):
        response = view_func(request, *view_args, **view_kwargs)
        """ Do something"""
        return response

但在这一行response = view_func(request, *view_args, **view_kwargs)我收到错误

__init__() takes exactly 1 argument (3 given)
Request Method: POST
Request URL:    http://127.0.0.1:8000/common/
Django Version: 1.8
Exception Type: TypeError
Exception Value:    
__init__() takes exactly 1 argument (3 given)

之前我必须检查视图功能的func_name。但是当我试图从func_name那里获取view_func属性时,我正在获得AttributeError那个CommonView has no attribute func_name,而我从所有人那里得到它基于功能的视图。

1 个答案:

答案 0 :(得分:2)

错误就在这一行

url(r'^common/$',CommonView),

你必须使用

url(r'^common/$',CommonView.as_view()),

您忘记在从网址

调用时,使用基于类的视图添加as_view()