在我的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)'),
)
更新
现在我知道至少有一种方法可以做到这一点,这是推荐的吗?或者是否有充分的理由明确为每个方法创建映射?
答案 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)]
)