1
我們有很多很多的視圖,它們利用了我們用於在urls.py中循環的簡單通用視圖,並指向基於相同功能的通用視圖。現在,我們正在上課基於通用視圖,我們需要複製這個功能,我們正在被迫所有的邏輯移動到urls.py文件,像這樣:Django基於動態類的通用視圖
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()),
)
這是一類,它是一類,它是一類!我只需要不斷地告訴自己,最終會陷入沉寂。謝謝,凱爾。 – scoopseven
覆蓋self.get_form_class更容易。在那裏,你只需返回表單類 – kiril