views.pyにview関数をwrapするオブジェクトを作る
以下のようなurlを指定する必要があって面倒。
普通にurls.pyを書くと
from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Examples: url(r'^json/foo', "app.jsonapp.views.foo", name="json_foo"), url(r'^json/bar', "app.jsonapp.views.bar", name="json_bar"), url(r'^json/hoo', "app.jsonapp.views.hoo", name="json_hoo"), # ... )
という感じに長くなる。めんどいかなと。
viewsの中にDispatcherを書いて,urls.pyのところは以下の一行だけですむようにしてみた。
urlpatterns = patterns('', url(r'^json/(?P<action>.+)$', "app.jsonapp.views.dispatch", name="json_api"), )
views.pyはこんな感じ。
class Dispatch(object): views = {} def __new__(self, *args, **kw): pass @classmethod def register(cls, fn, name=None): name = name or fn.__name__ cls.views[name] = fn return fn @classmethod def dispatch(cls, request, action, *args, **kw): fn = cls.views.get(action, None) if fn is None: raise Http404 else: return fn(request, *args, **kw) dispatch = Dispatch.dispatch register = Dispath.register @register def foo(request): pass @register def bar(request): pass @register def boo(request): pass
思ったよりも便利じゃない。
misc
templateのところで、バカなことをしていた。頭悪い。メモ。
{% comment %} <a href="{% url json_api foo %}" //こう書いて動かないなー。とかバカなことしてた。 {% endcomment%} <a href="{% url json_api "foo" %}"
ただしくは下の方。
contextからfooという変数を探す -> そんなの無い。(defaultは"") -> 何も表示されない。