[英]How to pass in the context of a Class Based View to the Template in 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.