我是这样做的:
有表格的页面包含这样的表格
联系人.html
{% include "contact_form.html" %}
这样就可以重复使用了。
接下来我设置我的视图代码(这个视图代码假设联系表单需要保存到数据库,因此是 CreateView):
class ContactView(CreateView):
http_method_names = ['post']
template_name = "contact_form.html"
form_class = ContactForm
success_url = "contact_form_succes.html"
这里有几点需要注意,这个视图只接受pots方法,因为表单会通过contact.html页面接收。对于这个视图,我设置了另一个模板,它是我们在contact.html 中包含的,即裸表单。
contact_form.html
<form method="POST" action="/contact">{% crsf_token %}
{{ form.as_p }}
</form>
现在将 javascript 添加到 contact.html 页面:
$("body").on("submit", 'form', function(event) {
event.preventDefault();
$("#contact").load($(this).attr("action"),
$(this).serializeArray(),
function(responseText, responseStatus) {
// response callback
});
});
这会将表单发布到 ContactView 并替换 #contact 之间的任何内容,这是我们的表单。您不能使用 jquery 的 .load 函数来实现一些更花哨的 html 替换。
此代码基于现有的工作项目,但稍作修改以使解释发生的事情更容易。