class 基于视图传递参数
class based view passing parameters
我刚刚开始使用基于 Class 的视图,我正在尝试将参数传递给基于 class 的视图,如下所示:
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
我的 url 模式看起来像:
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]+)/$']
我做错了什么??
kwargs
应该是反向函数的参数:
return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))
你的括号放错地方了。 kwargs
是 reverse
的参数,而不是 HttpResponseRedirect
.
的参数
return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))
请注意,这可以通过使用 redirect
快捷方式来缩短:
return redirect('myView', method='learning')
我刚刚开始使用基于 Class 的视图,我正在尝试将参数传递给基于 class 的视图,如下所示:
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
我的 url 模式看起来像:
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]+)/$']
我做错了什么??
kwargs
应该是反向函数的参数:
return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))
你的括号放错地方了。 kwargs
是 reverse
的参数,而不是 HttpResponseRedirect
.
return HttpResponseRedirect(reverse('myView', kwargs={'method': 'learning'}))
请注意,这可以通过使用 redirect
快捷方式来缩短:
return redirect('myView', method='learning')