我已经为我的项目子类化了Django的通用视图。我广泛使用它们在我们的前端站点上创建基本的CRUD视图。有些模型只有一个创建视图,有些模型有读取和更新等等。
这很好但我仍然为每个URL编写一行代码。即:
url(r'^referrer/create/$',ReferrerCreateView.as_view(), name='referrer_create'), url(r'^referrer/$',ReferrerListView.as_view(), name='referrer_list'), url(r'^referrer/(?P<pk>\d+)/update/$',ReferrerUpdateView.as_view(),
名= 'referrer_update'),
然后,我为每个模型和模型具有的视图执行此操作。对我来说这似乎不是一个非常干的方法。对于为模型创建的任何通用视图,是否有一种自动化这些URL的好方法?
答案 0 :(得分:1)
解决方案是创建一个方法,该方法将在给定一组视图的情况下返回url()
个调用的列表。像
views = {
'base_name': 'referrer',
'create_view': ReferrerCreateView,
'list_view': ReferrerListView,
'update_view': ReferrerUpdateView,
}
def generate_urls(views):
return [
url(r'^%s/create/$' % views['base_name'], views['create_view'].as_view(), '%s_create' % views['base_name'],
# and so on
]
然后你只需要做
urlpatterns = patterns('', *generate_urls(views))
对于您拥有的每组视图。
话虽如此,我相信你不应该这样做。这个解决方案(或任何不同的实现)过于复杂,如果出现问题,你将需要添加一个额外的层。
使用一些样板代码,尤其是配置代码,没有错,因为它可以让您的生活更加轻松。> / / p>
答案 1 :(得分:0)
我有同样非常关注的问题,我之前在这里分享过 一个答案是使用django rest框架,因为它自己实现了这样的url模式!?!我还没有遇到过这个解决方案。
我的解决方法是为每个模型提供专门的crud操作文件。 通过该解决方案,我减少了匹配时间,并将相关模型模式分组到一个文件中。 但我明白,不能完全解决你的问题