2016-09-17 82 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

相关问题