如何自动化 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 Generic Views:教程中,DetailView如何自动提供变量?
Django - 基于类的通用视图 - “没有要重定向到的 URL”