我是Django的新手,并且我试图获取从ajax发送的变量以便在Django视图中使用。我的观点:
def index(request):
if (request.is_ajax()):
username = request.GET['user']
else:
username = ''
context = {'user':username}
return render(request, 'index.html', context)
和ajax:
$.ajax({
url: '/index/',
type: 'GET',
data: {user: response.name, page: page}
});
我的问题是,基于ajax调用,username
在视图中不会更新。我知道ajax调用正常工作,因为在查看网络响应时,它正在传递正确的更新用户名。
我认为发生的是视图已加载,然后发生ajax调用并更新用户名,但视图不会重新呈现,因此不会更改。我在尝试获取用户名之后尝试了另一个渲染,但是没有改变任何东西,我也为处理ajax调用创建了一个单独的视图,但这似乎也没有用,因为视图总是在没有ajax请求的情况下加载是真的。
让这个工作的方法是什么?谢谢你的帮助。
答案 0 :(得分:7)
如果您打算通过Ajax返回一个JavaScript,然后JavaScript可以用来更新您的DOM,您需要返回HttpResponse
,最好是JSON格式,可以传递给$ .ajax中的处理程序呼叫。例如:
import json
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
if request.is_ajax():
username = request.GET.get('user', '')
user = User.objects.get(username=username)
# do whatever processing you need
# user.some_property = whatever
# send back whatever properties you have updated
json_response = {'user': {'some_property': user.some_property}}
return HttpResponse(json.dumps(json_response),
content_type='application/json')
return render(request, 'index.html', {'user': ''})
然后在您的JavaScript中,您可以执行以下操作:
$.get('/index/', {user: response.name, page: page}, function(json_response) {
console.log(json_response.user.some_property);
});
使用此方法,对视图的正常GET请求将返回呈现的HTML模板。对于Ajax请求,视图返回JSON格式的HttpResponse,它将传递给jQuery $ .get调用中的回调。
答案 1 :(得分:2)
要通过Ajax调用将数据发送到django视图,您需要将数据添加到Form,然后发送ajax请求。
实施例: 我的view.py:
def index(request):
"""
View function to handle Ajax request for image Link.
:param request: Ajax request data.
:return: image URL.
"""
if request.is_ajax():
try:
username = request.POST['username']
# perform operations on the user name.
except:
e = sys.exc_info()
return HttpResponse(e)
return HttpResponse(sucess)
else:
raise Http404
我的模板index.html
<html>
<head>
<title>Index</title>
<script>
$(document).ready(function() {
$('#btnSubmit').click(function() {
var data = new FormData();
var username = $('#id_username').val()
data.append('username', username);
$.ajax({
type: 'POST',
url: 'getuser/',
data: data,
processData: false,
contentType: false,
success: function(json) {
alert(json);
}
})
});
});
</script>
</head>
<body>
<h1>Index</h1>
User name: <input type="text" name="fname" id="id_username">
<input type="submit" id ="btnSubmit" name="submit" value="Send Test Push">
</body>
</html>
在此之后,你需要在urls.py中添加ajax调用url。