如何使用 Ajax 渲染 django-crispy-forms 的验证错误?

Posted

技术标签:

【中文标题】如何使用 Ajax 渲染 django-crispy-forms 的验证错误?【英文标题】:How to rendering validation errors of django-crispy-forms with Ajax? 【发布时间】:2020-08-28 00:57:30 【问题描述】:

我想用 ajax 显示 Django 默认表单错误。 如果有一些错误,这里的代码应该显示 django-crispy-forms 的验证错误。 但我不能那样做。 什么应该添加后记?

Views.py;

    if form.is_valid();  
        ~~~~~~
        if self.request.is_ajax():
            return JsonResponse(
                'is_valid': True,
                'redirect':reverse(/.../),
            )
        return redirect(hogehoge)
    else:
        if self.request.is_ajax():
            return JsonResponse(
                'is_valid': False,
                'error':form.errors,
            )

javascript;

<script>
$(function() 
  $(document).on('click', '.submit_button', function (e) 
    var $form = $('.form'); 
    var form = $form[0];
    e.preventDefault();
    $.ajax(
        processData: false,
        contentType: false,
        dataType: 'json',
        url: $form.attr('action'),
        type: $form.attr('method'),
        data: new FormData(form),
        ).done(function(data,textStatus) 
          if (data.is_valid) 
            window.location.href = data.redirect;
            
            else 
             *Display Django default validation errors if there are error forms.*
            
      );
    );
  );
</script>

*表单html

<form class="form" action="" method="post" enctype="multipart/form-data">
<div class="input">
  % if field.errors %
  % render_field field class+="form-handles is-invalid" %
  % for error in field.errors %
  <div class="invalid-render">
     error|escape 
  </div>
  % endfor %
  % else %
  % render_field field class+="form-handles" %
  % endif %
</div>
  <div class="text-center">
    <button type="submit" class="submit_button">submit</button>
  </div>

</form>

【问题讨论】:

您需要在哪里显示错误?你也可以发布你在ajax成功中获得的输出,即:data @Swati 现在,我编辑问题列表。你能看添加的内容吗?是的。 JSON 响应不是问题。 您能否在上面的问题中添加您在data 中获得的确切操作,以便我可以为您制作演示代码? 【参考方案1】:

您可以从官方文档中找到有关how to render only form in AJAX response 的信息。它将在那里包含表单、输入值和表单错误。

【讨论】:

非常感谢!多亏了这份文档,一切顺利。 @HASE96 这个答案对你有用还是你用另一种方式做的?请接受或为将来有此问题的其他开发者提供答案。

以上是关于如何使用 Ajax 渲染 django-crispy-forms 的验证错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AJAX 渲染部分内容?拉拉维尔 5.2

如何正确渲染部分视图,并使用 Express/Jade 在 AJAX 中加载 JavaScript 文件?

extjs:如何在列渲染器中使用 ajax 调用?

如何使用 Ajax 渲染 django-crispy-forms 的验证错误?

如何通过 AJAX 调用使用 jQuery 渲染 HTML

如何在ZF2中使用Ajax在模式窗口中渲染视图?