2016-07-22 247 views
0

我一直在为这个问题苦苦挣扎两天以上,我在这里看过类似的问题和许多文档,但没有任何帮助。基本上,我正在构建一个Django Web应用程序(人们可以将自己添加为朋友)我使用的是Django包django-friendship,但我希望发生以下情况:当用户在其他人配置文件中时,第一个可以单击“添加好友“按钮,并且必须发送好友请求。但我想实现这一点,而无需重新加载页面或渲染到另一个。必须触发才能发送请求的方法在views.py中。可能我需要使用ajax,但以什么方式?我的最终目标是例如按钮在Facebook中作为“添加朋友”按钮执行(无需重新加载)。Django:在表单提交时发送POST请求,而无需重新加载页面或渲染到另一个?

friend_profile.html

<form action="{% url 'users:fr_request' pk=friend.id %}" method="POST"> 
{% csrf_token %} 
<input type="submit" value="Add friend"/> 

views.py

def friendship_add(request, pk): 
if request.method == 'POST': 
    to_user = User.objects.get(pk=pk) 
    from_user = request.user 
    try: 
     Friend.objects.add_friend(from_user, to_user) 
    except AlreadyExistsError as e: 
     print('Exception when adding a friend ' + e) 
    else: 
     return HttpResponse('You added a friend') 

return render(request, 'users/friend_profile.html') 

urls.py

urlpatterns = [ 
url(r'users/(?P<pk>\d+)/send/$', views.friendship_add, name='fr_request'), 

]

在提交表单的那一刻,我将页面呈现给用户/(?P \ d +)/ send /,它调用view方法并执行Friend.objects.add_friend,但我希望不发送/发送/页面还是重新加载当前?

+0

那么,你的标签包含“ajax”,这确实是你需要使用的。你有什么尝试? –

+0

我试着用ajax和需要的数据进行表单处理,但它需要'url',我想避免它,因为它会调用url(然后视图等),并且新页面仍然会呈现 - 我不'你想要吗?你认为可以做什么? –

+0

我不明白你在说什么。您的Ajax脚本应发布到视图,该视图返回JS更新页面所需的数据,而无需重新加载。 –

回答

2

这可以很容易地实现使用jQuery。您可能需要一个ID的情况下,分配给您的形式有多种形式在你的页面:

<form action="{% url 'users:fr_request' pk=friend.id %}" method="POST" id="friend_form"> 
    {% csrf_token %} 
<input type="submit" value="Add friend"/> 

然后该脚本可能看起来像:

$(function() { 
    $("#friend_form").submit(function(event) { 
     // Stop form from submitting normally 
     event.preventDefault(); 
     var friendForm = $(this); 
     // Send the data using post 
     var posting = $.post(friendForm.attr('action'), friendForm.serialize()); 
     // if success: 
     posting.done(function(data) { 
      // success actions, maybe change submit button to 'friend added' or whatever 
     }); 
     // if failure: 
     posting.fail(function(data) { 
      // 4xx or 5xx response, alert user about failure 
     }); 
    }); 
}); 

欲了解更多信息和示例参考jQuery.post() documentation

+0

很好,它按我想要的方式工作,非常有帮助,谢谢! –

相关问题