我正在进行一个相当大的项目,其中每个视图都应该通过普通请求和ajax请求通过同一个url访问。我正在寻找有关如何创建一个小框架以非常通用的方式处理此问题的想法。根据视图是通过ajax调用还是普通调用,它需要呈现不同的模板并返回json而不是HttpResponse
对象。我希望收集有关这个主题的任何想法 - 主要目标应该是避免DRY原则,并使代码尽可能可重用。我已经考虑了不同的选项,如通用视图、视图装饰器等,但我对任何事情都持开放态度。因此,请让我听到您的建议或指向您所知道的任何现成的片段!
我正在进行一个相当大的项目,其中每个视图都应该通过普通请求和ajax请求通过同一个url访问。我正在寻找有关如何创建一个小框架以非常通用的方式处理此问题的想法。根据视图是通过ajax调用还是普通调用,它需要呈现不同的模板并返回json而不是HttpResponse
对象。我希望收集有关这个主题的任何想法 - 主要目标应该是避免DRY原则,并使代码尽可能可重用。我已经考虑了不同的选项,如通用视图、视图装饰器等,但我对任何事情都持开放态度。因此,请让我听到您的建议或指向您所知道的任何现成的片段!
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=...)