当后端表单验证失败时,如何在 jQuery 对话框中重新打开 Django 表单? [英] How to reopen a Django form in a jQuery dialog when the form validation fails in the backend?

查看:14
本文介绍了当后端表单验证失败时,如何在 jQuery 对话框中重新打开 Django 表单?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 Django 表单,在用户单击网页上的链接后,我将其动态加载到 jQuery 对话框中.链接中的 href 指向一个 Django 页面,该页面只包含表单内容,而不是整个站点布局.

<上一页>$('#add-note').click(function() {$('#dialog').load($(this).attr('href')).dialog({title: '添加注释',模态:真,可拖动:假,最小宽度:500,});返回假;});

如果用户提交在后端验证的表单,这将正常工作.但是,如果表单包含验证错误,Django 会将浏览器转发回表单页面,在这种情况下,该页面实际上并不是用户当前正在查看的页面.

看,用户在一个完全不同的页面上,表单只是动态加载到 jQuery 对话框中.所以问题是,处理这种情况的最佳方法是什么?如何将出现验证错误的表单打开回对话框而不是表单页面本身?

非常感谢所有帮助!

解决方案

在使用 AJAX 和 Django 表单时,我通常使用以下方法(虽然没有代码示例,但我想你会明白的).

  • 创建一个不同的模板来渲染这个表单(没有块,没有从另一个模板扩展)
  • 在您渲染模板以显示表单的视图中,通过 django.template.loader.render_to_string 将此表单直接渲染为 html(使用我提到的模板).将此呈现的表单放入上下文中,将其推送到模板.
  • 在您的模板中为表单创建一个容器并在其中呈现 html.
  • 当您现在通过 AJAX 提交表单时,请确保提交表单的处理程序也呈现表单(就像在您的原始视图中通过 django.template.loader.render_to_string 一样)并至少返回这是html.如果表单无效,Th​​ls 将包含错误.
  • 在获得 AJAX 响应时,只需完全替换容器中的表单即可.之后,您获得了 Django 表单,其中包括原始 django 表单提交中的所有错误.

这种方法的优点是 Django 仍在处理表单验证和错误显示,您不需要通过 Javascript 处理它(尤其是对于字段错误可能有点烦人).缺点当然是你必须为它编写更多的后端代码.:)

I have a Django form which I load dynamically to a jQuery dialog after a user has clicked a link on a webpage. The href in the link points to a Django page that contains just the form contents, not the whole site layout.

        $('#add-note').click(function() {
            $('#dialog').load($(this).attr('href')).dialog({
                title: 'Add a note',
                modal: true,
                draggable: false,
                minWidth: 500,
            });

            return false;
        });

This works fine if the user submits a form that validates in the backend. However, if the form contains validation errors, Django forwards the browser back to the form page, which in this case is not actually the page the user was viewing at the moment.

See, the user was on a totally different page and the form was just dynamically loaded to the jQuery dialog. So the question is, what would be the best way to handle this kind of situation? How do I open the form with validation errors back in to the dialog and not the form page itself?

All help appreciated greatly!

解决方案

When using AJAX and Django forms I usually do it the following approach (no code examples though, but I think you will get the idea).

  • create a different template just for rendering this form (no blocks, no extending from another template)
  • in your view which render the template to display the form, render this form direclty into html via django.template.loader.render_to_string (using the template I mentioned). Put this rendered form into the context pushing it to the template.
  • In your template create a container for the form and render the html inside there.
  • when you now submit your form via AJAX make sure the handler which submit the form renders the form as well (like in your original view via django.template.loader.render_to_string) and returns at least this as html. Thls will include the errors if the form was not valid.
  • When getting the AJAX response simply replace the form in your container completely. After that you got the Django form including all the errors from a original django form submit.

The advantages of this approach are that Django is still taking care of the form validation and error displaying and you don't need to take care of it via Javascript (can be a little annoying especially for field errors). Disadvantage is of course that you have to write more backend code for it. :)

这篇关于当后端表单验证失败时,如何在 jQuery 对话框中重新打开 Django 表单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆