使用通用FormView我想反映一些有关提交给用户的POST数据的内容,但我不确定如何最好地执行此操作。
class MyView(generic.FormView):
form_class = MyForm
def get_success_url(self):
return reverse('success')
reverse('success')
重定向到一个简单的
class SuccessView(generic.TemplateView):
template_name = 'success.html'
我是否可以通过params
调用访问SuccessView
中的get_success_url
对象,或者有更好(更简单)的方法吗? TIA Dan
更新(我的解决方案,但感谢您的想法)
我实际上发现这是(对我而言)解决问题的最简单方法:
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))
每个视图都继承了这个mixin,如果表单有效,那么我从中提取反馈数据并将其作为响应呈现 - 完全绕过get_success_url重定向。我已删除get_success_url
和SuccessView
。
答案 0 :(得分:5)
将数据作为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'])
然后在模板中,访问GET数据中的参数。
foo: {{ request.GET.foo }}
答案 1 :(得分:2)
我试图解决这个问题,一个简单的解决方案就是使用:
from django.contrib import messages
在get_success_url(self)中你可以写
def get_success_url(self)
messages.add_message(self.request, messages.SUCCESS, 'Contact Successfully Updated!')
return reverse('contacts:contact_detail', args=(self.get_object().id,))
在您的模板中,您可以通过
访问此消息{% for message in messages %}
{{ message }}
{% endfor %}
答案 2 :(得分:1)
实现目标的一种方法是使用Sessions。在用户的会话对象上存储您需要的任何值,并从SuccessView中访问它们。查看Django session documentation了解更多详情。