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 個のモデルのうちの 1 つまたは 2 つのメソッドをオーバーライドする必要がある場合、この実装ではそれが不可能になります。
モデルを引数として渡し、ジェネリック ビューを 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()),
)