基于类的视图传递参数

时间:2018-03-07 16:46:13

标签: django python-2.7 django-views django-class-based-views

我刚刚开始使用基于类的视图,我试图将参数传递给基于类的视图:

return HttpResponseRedirect(reverse('myView'), kwargs={'method': 'learning'})

我的观点是:

class MyView(View):
    form_class = MyForm
    initial = {'key': 'value'}
    template_name = 'algoRunning.html' 

    def dispatch(self, request, *args, **kwargs):
        print (kwargs['method'])
        data = self.readFile('myFile.txt')
        context = {'result': data}
        return render(request, self.template_name, context)

    def readFile(self, filePath):
        # read data
        return data

我的网址模式如下:

urlpatterns = [...    
url(r'^learning/(?P<method>[a-z]+)/$', my_views.MyView.as_view(), name='myView'),
..]

但是,它给了我以下错误

Reverse for 'myView' with no arguments not found. 1 pattern(s) tried: ['learning/(?P<method>[a-z]+)/$']

我做错了什么?

2 个答案:

答案 0 :(得分:2)

kwargs应该是反向函数的参数:

return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))

答案 1 :(得分:2)

您的括号位于错误的位置。 kwargsreverse的参数,而不是HttpResponseRedirect的参数。

return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))

注意,使用redirect快捷方式可以缩短这一点:

return redirect('myView', method='learning')