1

私のDjangoプロジェクトでは、url.pyモジュールは次のようになります。

urlpatterns = patterns('',
    (r'^$', 'web.views.home.index'),
    (r'^home/index', 'web.views.home.index'),
    (r'^home/login', 'web.views.home.login'),
    (r'^home/logout', 'web.views.home.logout'),
    (r'^home/register', 'web.views.home.register'),
)

ビュー内のすべてのメソッドのエントリが不要になるように、これを単純化する方法はありますか?このようなものがいいでしょう:

urlpatterns = patterns('',
    (r'^$', 'web.views.home.index'),
    (r'^home/(?<method_name>.*)', 'web.views.home.(?P=method_name)'),
)

アップデート

これを行う方法が少なくとも1つわかったので、この種のことをお勧めしますか?または、個々のメソッドごとにマッピングを明示的に作成する正当な理由がありますか?

4

2 に答える 2

3

ディスパッチャメソッドでクラスベースのビューを使用できます。

class MyView(object):
    def __call__(self, method_name):
        if hasattr(self, method_name):
            return getattr(self, method_name)()


    def index(self):
        ...etc...

urls.pyは次のようになります。

from web.views import MyView
urlpatterns = patterns('',
    (r'^$', 'web.views.home.index'),
    (r'^home/(?<method_name>.*)', MyView()),
)
于 2010-06-24T08:18:42.500 に答える
2

そのようなものかもしれません:

import web.views.home as views_list
urlpatterns = patterns('',
    (r'^$', 'web.views.home.index'),
    *[(r'^home/%s' % i, 'web.views.home.%s' % i) for i in dir(views_list)]
)
于 2010-06-24T03:25:32.467 に答える