如何为 django 通用视图自动化 url



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

解决方案是创建一个方法,该方法将返回给定一组视图的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))

对于您拥有的每一组视图。

话虽如此,我相信你不应该这样做。这个解决方案(或任何其他不同的实现)过于复杂,如果出现问题,将添加一个额外的层,你需要通过。

拥有一些样板代码(尤其是配置代码)并没有错,因为它可以让您在将来调试时更轻松地工作。

我也有同样的担忧,我之前在这里分享过一个答案是使用 django rest 框架,因为它自己实现了这样的 url 模式?!我还没有体验过这个解决方案。

我的解决方法是为每个模型提供一个用于 crud 操作的专用文件。通过该解决方案,我减少了匹配时间,并将相关的模型模式分组到一个文件中。但我知道这不会完全解决你的问题

最新更新