我们有很多很多使用简单通用视图的视图,我们曾经在 urls.py 中循环并指向相同的基于函数的通用视图。现在我们正在转向基于类的通用视图,我们需要复制此功能,并且我们被迫将所有逻辑移动到 urls.py 文件中,如下所示:
GENERIC_VIEWS_EDIT = ['ModelOne', 'ModelTwo', 'ModelThree', 'ModelFour', 'ModelN',]
for model in GENERIC_VIEWS_EDIT:
urlpatterns += patterns('',
url(r'^%s/(?P<pk>\d+)/$' % model.lower(), never_cache(staff_member_required(UpdateView.as_view(
model=eval(model),
context_object_name='object',
form_class=eval('%sForm' % model),
template_name='edit_form.html',
success_url='/yay/'
))), name='edit-%s' % model.lower()),
)
虽然这很好用,但我不屑在 urls.py 文件中包含所有这些“查看代码”。此外,如果我需要为这 N 个模型中的一个或两个覆盖一个方法,那么这个实现就不可能了。
有什么方法可以将模型作为参数传递并将我的通用视图移回views.py,像这样?
GENERIC_VIEWS_EDIT = ['ModelOne', 'ModelTwo', 'ModelThree', 'ModelFour', 'ModelN',]
for model in GENERIC_VIEWS_EDIT:
urlpatterns += patterns('',
url(r'^%s/(?P<pk>\d+)/$' % model.lower(), UpdateView.as_view(model=model)), name='edit-%s' % model.lower()),
)