2016-09-17 81 views
0

我正在研究一個項目,該項目有一堆視圖和相應的模板和表單。每個模板包含到登錄頁面的鏈接(從主模板繼承它):將表單添加到多個頁面的最佳方法?

<ul class="options"> 
... 
<li id="login"> 
    <a class="button" href="{% url 'forum:login' %}?next={{ request.path }}">Sign in</a> 
</li> 
</ul> 

並將其引導到一個單獨的登錄頁面,呈現標準的Django的登錄表單。

我想使用jQuery在單擊登錄鏈接的同一頁上創建或顯示該窗體。將表單添加到多個頁面的最佳方式是什麼?

我試圖讓HTML和動態編譯形式使用Ajax:

觀點:

class Login(FormView): 
... 
    def get(self, request, *args, **kwargs): 
     if request.is_ajax(): 
      form = self.get_form().as_ul() 
      return HttpResponse(form) 
     else: 
      return super(Login, self).get(request, *args, **kwargs) 

腳本:

$(document).ready(function() { 
$('#login').on('click', 'a', function(event) { 
    var loginUrl = $(this).attr('href'); 
    $.ajax({ 
     url: loginUrl, 
     type: 'GET'}) 
    .done(function(html) { 
     var newForm = $('<form/>', {action: loginUrl, method: 'post'}); 
     newForm.insertAfter('ul.options'); 
     newForm.append($('<input/>', 
       {type: 'hidden', name: 'csrfmiddlewaretoken', value: csrftoken})); 
     var newList = $('<ul/>'); 
     newForm.append(newList); 
     newList.append(html); 
     newList.append($('<li><input type="submit" value="Sign in"/></li>')); 
    }); 
    event.preventDefault(); 
}); 
}); 

但我不知道,如果有沒有更好的方法來完成這樣的任務?

另外我是jQuery的新手,所以我會很感激代碼的任何評論。

回答

2

,你可以把你的形式在它自己的模板loginform.html,然後使用「包括」在那裏你想要的:

{% include './path-to/loginform.html' %} 

編輯: 這也是處理像你的CSS的東西的好方法和javascript區域,導航菜單等。The Docs

相關問題