Python 如何使用视图中的数据呈现html模板?

Python 如何使用视图中的数据呈现html模板?,python,django,redirect,Python,Django,Redirect,我是django的新手。我做了一张表格。我希望如果表单填写成功,那么django应该重定向到一个成功页面,显示表单中输入的名称,但url本身中不应存在任何参数 我在互联网上搜索,得到的解决方案是将pk作为get参数重定向到url,该参数获取数据并显示在视图中。但是我不想在url中传递任何东西。一些网站说http不能用post数据重定向 这是我的观点 class UserRegistrationView(CreateView): model = UserForm template_name = '

我是django的新手。我做了一张表格。我希望如果表单填写成功,那么django应该重定向到一个成功页面,显示表单中输入的名称,但url本身中不应存在任何参数

我在互联网上搜索,得到的解决方案是将pk作为get参数重定向到url,该参数获取数据并显示在视图中。但是我不想在url中传递任何东西。一些网站说http不能用post数据重定向

这是我的观点

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>
祝贺您注册{{name}

基本上,我想要的是,如果这个人填写的表格中提到他/她的名字是“xyz”,那么重定向的成功页面应该说“祝贺您注册xyz”

您可以使用django会话,我相信这是在1.8中默认安装的

您可以通过会话传递pk,并在另一个视图中提取对象,而不会影响url。 确保你自己打扫干净


如果需要更多帮助,请告诉我。

在视图之间传递数据的一种可能方式是通过会话。因此,在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 

您可以在代码中修改的另一件事是,如果您正在覆盖
get\u success\u url

您的模型和表单具有相同的名称,则无需声明
get\u success\u url
,我想我看到了问题,当您调用
get\u success\u url
方法时,您正在重定向到
success
url,wich必须有一个关联的视图,并且给出
kwargs
param,您就是在给
url
param添加
success
url。我想那不是你想要的。你是如何定义
success
url的?我还没有定义我的成功url,但多亏了似曾相识,我找到了解决问题的方法。
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