【问题标题】:How to render an html template with data from view?如何使用视图中的数据呈现 html 模板?
【发布时间】:2015-06-01 21:39:51
【问题描述】:

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

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

这是我的意见.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>

基本上我想要的是,如果该人填写表格,将他/她的名字称为“xyz”,那么重定向的成功页面应该显示“恭喜您注册 xyz”

【问题讨论】:

  • 你的模型和表单同名?
  • 我想我看到了问题,当您调用get_success_url 方法时,您将重定向到success url,它必须有一个关联的视图,并且给kwargs 参数,您给了一个@ 987654326@ 参数到success 网址。我认为这不是你想要的。你是如何定义success url的?
  • 我还没有定义我的成功网址,但感谢似曾相识,我得到了解决问题的方法。

标签: python django redirect


【解决方案1】:

您可以使用 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 并在另一个视图中提取您的对象,而不会影响您的 url。 确保你自己清理干净。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2017-05-04
      • 2018-04-25
      • 2023-03-09
      • 2018-03-18
      相关资源
      最近更新 更多