繁体   English   中英

Django-如何通过基于类的视图将对象传递给模板?

[英]Django - how to pass object to a template with a class based view?

我将大多数视图切换到项目中基于类的视图,只是因为它们的重复代码较少,而且我不知道如何将对象传递给模板。 默认情况下,使用详细视图传递对象,这对于访问对象的直接属性是很好的选择,但是我的对象上具有通过扩展定义并通过该扩展的功能访问的标签。 在旧的基于函数的视图中,我将获取标签列表,并将其传递给模板,以进行迭代:

  return render(request, "gallerypage.html", {
            'gallery': gallery,
            'tags': gallery.misc_tags.names(),
            'form': form
        })

我的新视图如下所示:

class GalleryView(DetailView):
    model = Gallery
    template_name = 'gallerypage.html'

urls.py:

urlpatterns = patterns('',
    url(r'^(?P<pk>\d+)/$', GalleryView.as_view(), name='show_gallery'),
    url(r'^(?P<pk>\d+)/edit/$', GalleryUpdate.as_view(), name='update_gallery',),
)

Gallery对象可以很好地传递给模板,我可以使用<h1>{{ object.name }}</h1>类的东西来访问其属性,例如名称。 但是,由于尝试在模板中运行任意Python代码不是一个好主意,因此我需要一种更好的方法,将标签对象传递到模板中,以便像下面这样显示它们

{ { object.misc_tags.names()|join:", " }}

对它是行不通的。 谢谢

您可以覆盖get_context_data并添加所需的任何其他上下文。 这种方法通常在CBV的

调用不带括号的object.misc_tags.names将隐式调用该函数。 或者使用建议的get_context_data类的get_context_data。

django文档中的模板中的句点:

从技术上讲,当模板系统遇到点时,它将按以下顺序尝试以下查找:

  • 字典查询
  • 属性查询
  • 方法调用
  • 列表索引查找

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM