我是django的新手。我做了一个表格。我希望如果表单成功填写,那么django应该重定向到显示在表单中输入的名称的成功页面,但是url本身不应该存在任何参数。
我在互联网上搜索,我得到的解决方案是将pk作为get参数重定向到url,该参数获取数据并在视图中显示。但是我不想在网址中传递任何东西。有些网站称http无法与帖子数据重定向。
这是我的views.py
class UserRegistrationView(CreateView):
model = UserForm
template_name = 'userregistration.html'
form_class = UserForm
success_url = 'success'
def get_success_url(self):
return reverse('success',kwargs = {'name' : self.object.firstName})
这是我要重定向的模板:
<h2>Congratualations for registering {{name}} </h2>
基本上我想要的是,如果该人填写提及他/她的firstName为“xyz”的表格,则重定向的成功页面应该说“祝贺注册xyz”
答案 0 :(得分:0)
您可以使用django会话,我相信默认安装在1.8
中看here
# Set a session value:
request.session["fav_color"] = "blue"
# Get a session value -- this could be called in a different view,
# or many requests later (or both):
fav_color = request.session["fav_color"]
# Clear an item from the session:
del request.session["fav_color"]
您可以通过会话传递您的PK并在另一个视图中提取您的对象,而不会影响您的网址。 确保你自己清理干净。
如果需要更多帮助,请告诉我。
答案 1 :(得分:0)
在视图之间传递数据的一种可能方法是通过会话。因此,在UserRegistrationView中,您需要覆盖form_valid方法,如下所示。
class UserRegsitrationView(CreateView):
def form_valid(self,form):
self.request.session['name'] = self.object.firstName
return super(UserRegistrationView,self).form_valid(form)
class SuccessView(TemplateView):
template_name = "success_template.html"
def get_context_data(self,**kwargs):
context = super(SuccessView,self).get_context_data(**kwargs)
context['name'] = self.request.session.get('name')
del self.request.session['name']
return context
您可以在代码中修改的另一件事是,如果要覆盖success_url
get_success_url