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)'),
)

更新

既然我知道至少一种方法可以做到这一点,那么推荐这种方法吗?或者是否有充分的理由为每个单独的方法显式创建映射?

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 回答