К сожалению, настоящие ответы немного устарели, вот как это сделать с более свежими версиями Django (включая Django> 2.0 ):
Используйте JsonResponse , подкласс HttpResponse , для этого:
# views.py
from django.http import JsonResponse
def get_coords(request):
"""returns json response"""
json_data = {'xval': 10, 'yval': 10}
return JsonResponse(json_data)
Он принимает dict
в качестве параметра, но в принципе вы можете передать любой JSON-сериализуемый. Я бы не рекомендовал вам этого делать, но если вы передаете объект, который не является dict
, вам нужно установить параметр safe=False
.
Ajax-запрос может выглядеть примерно так:
# index.html
...
<head>
...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
$.get("{% url 'ajax_get_coords' %}", function(data) {
var xval = data.xval;
var yval = data.yval;
...
});
</script>
...
С соответствующим urlconfig:
# urls.py
urlpatterns = [
path('ajax_coords/', views.get_coords, name='ajax_get_coords'),
...