"action"属性如何在 Django 表单中工作?



我已经了解了Django中的表单(从零开始并使用ModelForm(。ModelForm非常有用!

我可以对整件事进行编码,但有一件事让我感到困惑,那就是";动作=";属性。

这是我的困惑。我使用了"method"属性,但我见过有人使用action='/example_path/'。这意味着什么?它在Django中是如何工作的?只使用";method=post";属性

drinks_form.html:

{% extends 'robots/base.html' %}
{% load static %}
{% block content %}
<h3 class="main-title">Let us know your opinion of a drink of choice: 
</h3>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
{% endblock %}

我填写了表格,点击提交按钮,"感谢页面"就会出现,一切都好。

它似乎运行良好,实例正在创建并保存在我的"Drinks"表中。我进入python shell,列出从Drinks类创建的所有对象,它们就在那里。

此外,我在我的管理网站上包括了这个表,它们被保存了,没有问题。

"action"属性具体做什么?我知道这可能是一个有趣的HTML问题,但我6个月前才开始编码,所以请耐心等待!

<form action='' method='post'>
#...
</form>

谢谢大家。希望我的问题很清楚。

action是基本的HTML内容(请参阅:https://www.w3schools.com/tags/att_form_action.asp)。它定义了浏览器POST或GET(取决于方法(填充表单的URL。现在,如果值为空,它将使用当前浏览器位置栏中的相同URL。

在Django术语中,让操作为空,它将把数据POST到相同的URL,因此,通常是相同的视图。因此,您必须在视图中检查request.POSTrequest.GET中是否有内容,以了解用户是第一次加载视图还是发布表单。例如,UpdateView(https://docs.djangoproject.com/en/3.1/ref/class-based-views/generic-editing/)将自动执行此操作。

一个好习惯是在成功POST后重定向用户,这样页面重新加载就不会再次发布表单。

最新更新