AjaxのビューがDRYにできないか

2007/01/08 11:44

※ 商品のリンクをクリックして何かを購入すると私に少額の報酬が入ることがあります【広告表示】

DjangoでAjaxを使うと、どうも普通のフレームワークチックになってしまう。どうもDRYじゃない。

Djangoに組み込まれているシリアライザも、QuerySetを受けとるものとDictを受けとるものの2種類あるのも面倒。

Dictを受けとるものを使うのが悪いんだけど…。

なにか解決策が無いかと考えても、 Ajaxの戻りはなかなか一般化できない し、定型にしたとしても 名前を付けてほげらないと何とも出来ない から、挫折してデコレータだけ書いてみた。

  from django.http import HttpResponse
  from django.db.models.query import QuerySet

  def generic_json(func, ensure_ascii=True, charset='utf-8'):
    def _generic_json(*args, **kw):
      res = func(*args, **kw)
      if isinstance(res, QuerySet):
        from django.core import serializers
        result = serializers.serialize('json', res, ensure_ascii=ensure_ascii)
      elif isinstance(res, dict):
        from django.utils import simplejson
        result = simplejson.dumps(res, ensure_ascii=ensure_ascii)
      else :
        raise NotImplementedError
      return HttpResponse(result, mimetype='text/javascript; charset=%s' % charset)
    return _generic_json

ビューにdictかQuerySetを返させて、view_func = generic_json(view_func, ensure_ascii=False) とすればjsonを返す。ただそれだけ。むぅ、なんとかならないものか。

Prev Entry

Next Entry