Эта статья кажется довольно хорошим руководством по работе с ajax и обычными запросами.У объекта request
есть метод is_ajax()
, который будет искать HTTP_X_REQUESTED_WITH: XMLHttpRequest
.Это, конечно, будет зависеть от правильности установки этих значений при помощи JavaScript, отправляющего запрос.
Из статьи:
from django.http import HttpResponse
from django.core import serializers
from django.shortcuts import render_to_response
from your_app.models import ExampleModel
def xhr_test(request, format):
obj = ExampleModel.objects.all()
if request.is_ajax():
data = serializers.serialize('json', obj)
return HttpResponse(data,'json')
else:
return render_to_response('template.html', {'obj':obj}, context=...)
Или вы можете использовать django-pneon которая является RESTful-структурой для Django.Я использую этот модуль в своем проекте.Вы можете определить ресурсы (что-то вроде представлений), и в зависимости от типа mime или формата, переданного в ваш URL, он будет выдавать html, xml или json.Это, вероятно, будет лучшим способом, если каждое отдельное представление (или подавляющее большинство) должно быть возвращено в разных форматах.