没有方法名称的Django url.py

时间:2010-06-24 03:09:42

标签: python django url url-pattern

在我的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)'),
)

更新

现在我知道至少有一种方法可以做到这一点,这是推荐的吗?或者是否有充分的理由明确为每个方法创建映射?

2 个答案:

答案 0 :(得分: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()),
)

答案 1 :(得分: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)]
)