【问题标题】:How to pass context data in success_url?如何在 success_url 中传递上下文数据?
【发布时间】:2014-12-16 11:04:00
【问题描述】:

我已经创建了一个表单,我希望再次返回到同一个表单,这一次使用上下文数据,可以在我的模板中使用以显示表单已成功发送。

我该怎么做?

class ContactUsView(FormView):
    form_class = ContactUsForm
    template_name = 'website/pages/contact_us.html'

    def form_valid(self, form):
        form.send_email()
        return super(ContactUsView, self).form_valid(form)

    def get_success_url(self):
        # Something here?

所以基本上我希望get_success_url 返回到ContactUsView,例如{'success':'true'} 我可以在模板中阅读并呈现一个框,表明它已经成功。我不想切换到另一个静态页面!

【问题讨论】:

  • 试试这个return reverse('url_name', kwargs={'pk': pk})
  • 我并不想传递一个 kwarg,因为我将不得不更改该页面的 url 模式。这似乎有点矫枉过正。我只想将一些变量传递给上下文。如果我使用你的方法,它在任何情况下都不会在不改变任何东西的情况下立即工作:Reverse for 'ContactUsView' with arguments '()' and keyword arguments '{'pk': '12'}' not found. 1 pattern(s) tried: ['contact/$']
  • 在这种情况下,您可以在 url 中使用可选参数。给你urls.py
  • url(r'^contact/$', ContactUsView.as_view(), name="ContactUsView"),
  • 添加这样的网址:url(r'^contact/(?P<success>\w+)$', ContactUsView.as_view(), name="ContactUsView"), 并像这样更改您的视图:def ContactUsView(success=None):

标签: django django-forms django-templates django-views


【解决方案1】:

将这样的网址添加到urls.py

url(r'^contact/(?P<success>\w+)$', ContactUsView.as_view(), name="ContactUsView"),

您可以像这样在class-based 视图中访问此参数:

get_context_data 方法添加到您的class-view

class ContactUsView(DetailView):
    context_object_name = 'my_var'

    def get_context_data(self, **kwargs):
        context = super(ContactUsView, self).get_context_data(**kwargs)
        context['success'] = self.success
        return context

您可以在模板中使用{{ my_var.success }}

【讨论】:

  • 现在的问题是,我如何获得模板来检测/解析success kwarg?
猜你喜欢
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-03-16
  • 2023-03-13
相关资源
最近更新 更多