Аякс с Джанго - PullRequest
       33

Аякс с Джанго

3 голосов
/ 19 января 2011

Я сейчас работаю над довольно большим проектом, где каждое представление должно быть доступно через обычный запрос и запрос ajax через один и тот же URL.Я ищу идеи о том, как создать небольшой фреймворк, чтобы справиться с этим очень общим способом.В зависимости от того, вызывается ли представление через ajax или нет, ему нужно отобразить другой шаблон и вернуть json вместо HttpResponse объекта.Я хотел бы собрать какие-либо идеи на эту тему - главная цель должна состоять в том, чтобы не избегать сухого принципа и сделать код, который можно использовать повторно.Я уже рассматривал различные варианты, такие как общие представления, декораторы представлений и т. Д., Но я открыт для всего.Поэтому, пожалуйста, позвольте мне услышать ваши предложения или указать на любые готовые фрагменты, которые вы знаете!

Ответы [ 2 ]

6 голосов
/ 20 января 2011

Эта статья кажется довольно хорошим руководством по работе с 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.Это, вероятно, будет лучшим способом, если каждое отдельное представление (или подавляющее большинство) должно быть возвращено в разных форматах.

0 голосов
/ 06 февраля 2013

Я использовал декоратор для этого. Пусть представление вернет контекст, шаблон и альтернативный шаблон.

Если версия Ajax хочет вернуть данные, третьим возвращаемым значением может быть объект данных, который нужно преобразовать в JSON.

...