這裏是我是如何做到的:
具有表格的頁面包含如此形式
contact.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替換。
此代碼基於一個現有的工作項目,但稍作修改以便解釋更容易發生的事情。
你可以用'$('body')。load(...)'替換主體。不過,我認爲你應該返回一個JSON響應並更新真正改變的內容。如果你不得不刷新整個頁面,爲什麼你需要AJAX? – 2012-07-20 14:19:25
這是我遇到的問題之一 - 我的POST調用返回的數據不是json,並且將'json'作爲filetype導致沒有任何東西被返回。 – Northernlights 2012-07-20 14:25:21