0

我现在接到一个任务,那就是基于一个 web 项目在手机上开发一个原生应用程序。所以我认为服务器和客户端之间通信的最佳方式是使用 json。

然后我需要所有的响应给我一个 json 格式的结果。但是现在在 web 项目中,几乎每个视图都使用render_to_response如下:

ctxt = RequestContext(request,*args)
return render_to_response('XXX.html',ctxt)

然后我想重写render_to_response,如下所示,所以我不需要将每个都更改为一个新函数:

def render_to_response:
  return new HttpResponse(simplejson.dumps(*args), mimetype='text/json'))

显然,我可以在 django 中更改源代码,但这不是一个切实可行的方法。因为其他项目也需要使用它。

或者我可以用这个render_to_response函数写一个新模块,然后导入这个

from django.shortcuts import render_to_response

但我不确定这是否可能。

如果这可行,我还需要将此导入添加到每个.py文件中,这仍然是一项巨大的工作。

所以我想要一个对整个项目改动最少的最好方法。

4

1 回答 1

0

尝试用return这个替换你的

return HttpResponse(json.dumps(ctxt), content_type="application/json")

另一方面,如果请求它的客户端不需要它,您实际上不需要返回上下文。您最好返回一条简单的消息,例如“成功”

另一个解决方案是包含django-annoying在您的项目中,并在@ajax_request 您想要以 json 响应的所有视图上使用装饰器。

@ajax_request
def my_view(request):
    news = News.objects.all()
    news_titles = [entry.title for entry in news]
    return {'news_titles': news_titles}

在此处参考示例 - https://bitbucket.org/offline/django-annoying/wiki/Home

于 2013-01-18T07:50:17.060 回答