對於基於類的視圖,你可以做這樣的:
1)寫AjaxMixin爲通過AJAX視圖return內容(JSON格式),並添加此所需查看,該回執
class LazyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Promise):
return force_text(obj)
return obj
class AjaxViewMixin(View):
"""
A mixin that can be used to render a JSON response for CBV.
"""
payload = {}
def render_to_response(self, context, **response_kwargs):
if self.request.is_ajax():
html = render_to_string(self.template_name, context, context_instance=RequestContext(self.request))
payload = {'success': True, 'html': html}
payload.update(self.payload)
response_kwargs['content_type'] = 'application/json'
return HttpResponse(json.dumps(payload, cls=LazyEncoder), **response_kwargs)
return super(AjaxViewMixin, self).render_to_response(context, **response_kwargs)
2)在html頁面是這樣的:
$('open_form_button').on('click', function(e){
e.preventDefault();
$.post('{% url 'view_which_return_form' %}' , function(data) { //may use and get, no sense
if (data.success) {
$('#place_for_form').html($($.parseHTML(data.html,document,"true")).filter('*'))
}
});
});
這種感覺 - 你通過Ajax返回變量'html'中的渲染表單塊並插入到所需的位置。 記住使用
$($.parseHTML(data.html,document,"true")).filter('*')
爲返回的數據,或者您在返回阻止腳本無法正常工作。
您可以查找「JavaScript模式」,這是一種彈出式對話框,顯示在頁面內部,可以通過編程加載特定的頁面。然後,無論用戶何時點擊日曆小部件,都會顯示一個新的模式,其中包含視圖的URL,用於編輯事件(類似於'/ events/edit /?date = 2014-09-27')。 – Tiago 2014-09-27 17:06:42