HTML 表单没有 action 属性

32

在 Django / Pinax 中,我遇到了这样的登录表单:

<form class="login" method="POST" action="">

它完全正常运作。因此,我假设一些JavaScript或Django框架中的内容将值放入操作属性中。
所以,我的问题是:

  • Django如何插入操作?
  • 为什么他们要这样做?
  • 我如何找出此表单的操作是什么?

更新:我看到这根本不是Django的事情,而是大多数浏览器都会这样做。

4个回答

43
在大多数浏览器中,将表单的“action”属性设为空字符串会使表单提交到当前浏览器加载的URL,也就是最初提供该表单的脚本所在的URL。

啊,我不知道这个。那么这是懒惰还是依赖这个的好习惯呢? - interstar
我认为这是一个好的实践,因为你可以减少代码中的 URL 数量。但我更喜欢根本不设置 action。是否存在任何需要空 action 的浏览器? - Javier
15
如果没有行动属性,表单在所有主流浏览器中都可以正常工作。然而,如果您想让您的HTML有效验证,那么行动属性是必须的。 - Imran

6

有关使用空操作的表单的有趣见解,请阅读此线程,它为您提供了关于此问题的HTML5更新视角。


4

此页面加载的 JavaScript 也可能根据使用该页面的应用程序,在页面加载后设置一个动作。

另一个可能性是 JavaScript 处理 onsubmit 事件。这样做可以防止页面重新加载或重定向到特定页面。


0

我猜回答这篇文章有点晚了。无论如何,我会分享一下我对此的学习。

如果表单中没有指定“action”,那么Django将在相应的视图中查找HttpResponseRedirect

例如,在下面的示例中:

if form.is_valid(): # All validation rules pass
        # Process the data in form.cleaned_data
        # ...
        return HttpResponseRedirect('/thanks/')

一旦表单经过验证(并处理完成),页面将重定向到“感谢页面”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接