2014-09-27 9 views
0

我有一個包含fullcalendar的django頁面。我的用例是我希望能夠點擊一個事件,這將打開一個彈出窗口並對其進行編輯(該事件是一個Django模型)。我想我找不到正確的關鍵字,因爲我找不到任何簡單的方法來做到這一點。理想情況下,我想在我的視圖文件中使用get方法,該方法將只返回html中的表單,我將在帶有Ajax調用的fullcalendar回調中調用它,然後用它填充彈出窗體。從Ajax獲取Django表單中的內容

我不是網絡專家,對不起,如果我的詞彙不是正確的:-)。

乾杯, 靈光

+0

您可以查找「JavaScript模式」,這是一種彈出式對話框,顯示在頁面內部,可以通過編程加載特定的頁面。然後,無論用戶何時點擊日曆小部件,都會顯示一個新的模式,其中包含視圖的URL,用於編輯事件(類似於'/ events/edit /?date = 2014-09-27')。 – Tiago 2014-09-27 17:06:42

回答

0

對於基於類的視圖,你可以做這樣的:

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('*') 

爲返回的數據,或者您在返回阻止腳本無法正常工作。