【问题标题】:Contactform in footer of page页面底部的联系表格
【发布时间】:2018-06-30 10:27:33
【问题描述】:

我在网站的页脚中有一个联系表。所以它在每一页上。它可以工作,但有一个问题:一旦发送,它就不再显示了。更具体地说,我猜我的请求何时不再为空。

@register.inclusion_tag('home/tags/contact.html', takes_context=True)
def contact_form(context):
    request = context['request']

    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['naam']
            from_email = form.cleaned_data['email']
            message = form.cleaned_data['bericht']
            messages.success(request, 'Form submission successful')
        try:
            send_mail(subject, message, from_email, ['myemailaddress'])

        except BadHeaderError:
            return HttpResponse('invalid header found')
        return context

    else:
        form = ContactForm()

    return {request: 'context.request', 'form': form}

我们将不胜感激。

【问题讨论】:

    标签: django django-forms django-templates wagtail


    【解决方案1】:

    每当有人提交表单时,您似乎都在返回模板标签的上下文而没有 form

    见下文:

    • 在函数结束之前不要返回上下文对象,这将使事情更容易处理。
    • 最好将键添加到上下文对象中,这样您就不必重新添加 request,因为它已经存在。
    • 删除else分支到最后,你想一直发送一个新的(空白)表单,即使在收到响应(通过POST)之后也是如此。

      @register.inclusion_tag('home/tags/contact.html',takes_context=True) def contact_form(上下文): 请求 = 上下文['请求']

      if request.method == 'POST':
          form = ContactForm(request.POST)
          if form.is_valid():
              subject = form.cleaned_data['naam']
              from_email = form.cleaned_data['email']
              message = form.cleaned_data['bericht']
              messages.success(request, 'Form submission successful')
          try:
              send_mail(subject, message, from_email, ['myemailaddress'])
      
          except BadHeaderError:
              return HttpResponse('invalid header found')
          #return context # returning here sends back the context without 'form'
      
      # remove the else branch, you always want to return an empty form
      #else:
      form = ContactForm()
      
      # return {request: 'context.request', 'form': form}
      # return at a consistent place in a consistent way
      # add to context, rather then recreating it
      context['form'] = form
      return context
      

    另一种解决方法是重定向回联系页面所在的 URL(但是,您会丢失您的消息)。

    【讨论】:

    • 像魅力一样工作,无需重新加载页面!一个小的改进可能是在提交后清空表单字段。虽然从用户的角度来看,我不确定它是否会更好。
    • 感谢您的反馈,我已经更新了答案以表明应该始终返回新表单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2023-03-17
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多