dan*_*van 3 python django django-forms django-generic-views
使用通用FormView我想反映一些关于提交给用户的POST数据,但我不确定如何最好地执行此操作.
class MyView(generic.FormView):
form_class = MyForm
def get_success_url(self):
return reverse('success')
Run Code Online (Sandbox Code Playgroud)
reverse('success') 重定向到一个简单的
class SuccessView(generic.TemplateView):
template_name = 'success.html'
Run Code Online (Sandbox Code Playgroud)
有没有办法可以通过调用访问params对象,或者有更好(更简单)的方法吗?TIA DanSuccessViewget_success_url
更新(我的解决方案,但感谢您的想法)
我实际上发现这是解决问题的最简单方法(对我来说):
class SuccessMixin(object):
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form, **kwargs)
def form_valid(self, form):
# this is my post processing step which returns the
# feedback data that I want to pass to the user
form_data = form.get_some_data_from_form()
return render_to_response('submitted.html',
{'form_data': form_data,},
context_instance=RequestContext(self.request))
Run Code Online (Sandbox Code Playgroud)
每个视图都继承了这个mixin,如果表单有效,那么我从中提取反馈数据并将其作为响应呈现 - 完全绕过get_success_url重定向.我删除了get_success_url和SuccessView.
将数据作为GET参数包含在您的成功网址中.
def get_success_url(self):
url = reverse('success')
# maybe use urlencode for more complicated parameters
return "%s?foo=%s" % (url, self.request.POST['bar'])
Run Code Online (Sandbox Code Playgroud)
然后在模板中,访问GET数据中的参数.
foo: {{ request.GET.foo }}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4330 次 |
| 最近记录: |