【问题标题】:How can i pass a message to a page while submitting a form?提交表单时如何将消息传递到页面?
【发布时间】:2018-05-06 12:13:42
【问题描述】:

当我提交表单时,我想将消息作为“表单成功提交”传递到同一页面“successs.html”。这怎么可能?

class SuccessView(FormView):
    template_name = 'success.html'
    form_class = QuestForm
    success_url='success'   
    def form_valid(self, form):
        ob9=Logs.objects.all()
        for i in ob9:
            logids=i.id
        str(logids)
        q1= form.cleaned_data['ques']
        obj1=Quest.objects.create(logid=logids,status=0,question=q1)
        return super(SuccessView,self).form_valid(form)

【问题讨论】:

  • 这段代码很少有任何意义。遍历所有 Logs 对象并每次设置相同的变量有什么意义?你认为调用str() 而不将其分配给任何东西会做什么?

标签: django django-2.0


【解决方案1】:

如果你使用 Django 的messages framework,它就像在调用处理过程中的任何时候添加一条消息一样简单(这会将消息添加到当前的request 对象中)并将其添加到响应中:

from django.contrib import messages
messages.success("Form successfully submitted")

您可以在致电 return super().form_valid(form) 之前执行此操作。

在您的模板中,您当然需要添加代码来显示消息,文档中的示例向您展示了如何做到这一点。

【讨论】:

  • 在模板中如何检索消息?
【解决方案2】:

django message Framework 提供了不同的方法:

 from django.contrib import messages
 messages.add_message(request, messages.INFO, 'Your message', extra_tags='more_tags')
 # extra_tags is optional

messages.success(request,"Your message")

要在模板中检索它,请使用类似

{% if messages %}
    <ul class="messages">
    {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
    </ul>
{% endif %}

【讨论】:

  • 它显示错误:success() 缺少 1 个必需的位置参数:'message'
  • 你错过了request 作为第一个参数:messages.success(request,"Your message")。检查我的答案@Anjitha,我更新了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
相关资源
最近更新 更多