【问题标题】:Django class based views - Direct url to particular method in class基于 Django 类的视图 - 将 URL 定向到类中的特定方法
【发布时间】:2015-09-04 05:38:36
【问题描述】:

我使用基于函数的视图已经有一段时间了,但直到现在才使用基于类的视图。我当前的项目需要跨多个视图的大量通用代码,因此我正在探索基于类的视图,以便可以使用继承。

我的要求是将 url 指向类中的特定函数。类似于可以在 django admin 上完成的操作。在 Django admin 中,我在继承自 ModelAdmin 的类中使用 get_urls 方法将 url 指向类方法。

def get_urls(self):
    try:
        from django.conf.urls.defaults import patterns, url

        urls = super(MyModelAdmin, self).get_urls() 

        my_urls = patterns('',
                       url(r'^myurl/(?P<obj_id>\d+)/$',
                           self.admin_site.admin_view(self.myFunction),
                           name="my_function"),
                         )

        return my_urls + urls
    except Exception, e:
        logger.error(e)

myFunction 方法只是调用views.py 中的一个方法,并传递请求对象和对象id。我的文档是here

是否可以对基于类的视图做类似的事情?到目前为止,从我的搜索中,我找不到任何文档显示将函数指针传递给as_view 方法的可能性,就像我们可以执行admin_view 方法一样。请指导我或指出正确的文档。

【问题讨论】:

  • 我不确定我是否理解您想要实现的目标。您是否尝试在 Django 管理应用程序中使用基于类的视图?还是使用您自己的应用程序?如果是后者,那么调用as_view 方法应该可以完成工作。类似url(r'^myurl/(?P&lt;obj_id&gt;\d+)/$', MyClassBasedView.as_view(), name="my_function"),)
  • @kaveh:感谢您的及时回复。我正在尝试在我自己的应用程序中使用基于类的视图。我只是将它与 admin 进行比较,因为我觉得 admin 与基于类的视图非常相似。关于您的建议,TemplateView 不就是这样吗?我打算将 url 映射到我的自定义类方法。
  • 调用as_view 适用于所有CBV;它们都继承自django.views.generic.View 类;您可以将它与从基类或其他提供的类继承的自定义类一起使用。

标签: python django django-class-based-views django-1.5


【解决方案1】:

由于历史原因,管理视图与 Django 的其他基于类的视图非常不同,因此将实现从一个移到另一个可能会很棘手。

常规 CBV 旨在连接到特定的 url 模式,它们并非旨在将不同的 url 分配给不同的视图,因此实现 get_urls 方法实际上没有意义。

【讨论】:

  • 感谢@Alasdair 的回复。
猜你喜欢
  • 2012-01-25
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 2018-08-21
  • 2016-05-24
  • 2012-01-25
  • 2020-01-22
相关资源
最近更新 更多