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

时间:2015-06-01 21:39:52

标签: python django redirect

我是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”

2 个答案:

答案 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