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

Posted

技术标签:

【中文标题】如何自动化 django 通用视图的 url?【英文标题】:How can I automate urls for django generic views? 【发布时间】:2014-03-26 23:23:45 【问题描述】:

我为我的项目子类化了 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(),

name='referrer_update'),

然后我为每个模型和模型拥有的视图执行此操作。这对我来说似乎不是一个非常干燥的方法。对于为模型创建的任何通用视图,是否有一种自动处理这些 url 的好方法?

【问题讨论】:

【参考方案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))

对于您拥有的每组视图。

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

拥有一些样板代码,尤其是配置代码并没有错,因为它使您的生活在未来更容易调试。

【讨论】:

这太美了!我从来没有想过做这样的事情,但它看起来是做 api 生成和类似事情的好方法。【参考方案2】:

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

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

【讨论】:

以上是关于如何自动化 django 通用视图的 url?的主要内容,如果未能解决你的问题,请参考以下文章

django:使用搜索自动生成列表视图(管理员风格)

Django命名的url,通用视图?

Django Generic Views:教程中,DetailView如何自动提供变量?

Django - 基于类的通用视图 - “没有要重定向到的 URL”

urls.py 中的 Django 时区逻辑和通用视图引发错误,但它是视图、字段还是我?

带有更新的 slug 的 Django 通用视图 UpdateView 重定向 URL