如何自动化django通用视图的URL?

时间:2014-02-25 00:42:25

标签: django django-urls django-generic-views

我已经为我的项目子类化了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的好方法?

2 个答案:

答案 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操作文件。 通过该解决方案,我减少了匹配时间,并将相关模型模式分组到一个文件中。 但我明白,不能完全解决你的问题