我最近第一次与django cms合作,我创建了一个用于上传图片的图库插件。
这是一个非常简单的插件,使用的ImageGalleryPlugin
模型继承自CMSPluginBase
,然后是Image
模型,其中ForeignKey
来自图库。
使用占位符将图库插件附加到页面,然后在我创建apphook
的图库中查看图像,以将插件模板链接到类似的视图;
def detail(request, page_id=None, gallery_id=None):
"""
View to display all the images in a chosen gallery
and also provide links to the other galleries from the page
"""
gallery = get_object_or_404(ImageGalleryPlugin, pk=gallery_id)
# Then get all the other galleries to allow linking to those
# from within a gallery
more_galleries = ImageGalleryPlugin.objects.all().exclude(pk=gallery.id)
images = gallery.images_set.all()
context = RequestContext(request.context, {
'images': images,
'gallery': gallery,
'more_galleries': more_galleries
})
return render_to_template('gallery-page.html', context)
现在我对这个方法的问题是当你在CMS中发布一个页面时,它复制了那个页面上的所有ImageGalleryPlugin
个对象,所以当我查看图像时,我的数量增加了一倍链接到其他库,因为查询收集重复的对象。
我无法从文档中正确理解这种行为,但我认为CMS保留了您创建的原始对象,然后将副本创建为要显示给用户的库的“实时”版本。
CMS中的哪个位置会发生这种情况,我的ImageGalleryPlugin
个对象的ID存储在哪里,以便我只能在此视图中收集正确的ID而不是收集所有对象?
答案 0 :(得分:0)
我终于解决了自己的问题。
我的CMSPlugin
对象与Page
之间的关联为myobj.placeholder.page
,因此我的过滤解决方案是;
# Get the ImageGalleryPlugin object
gallery = get_object_or_404(ImageGalleryPlugin, pk=gallery_id)
# Get all other ImageGalleryPlugin objects
galleries = ImageGalleryPlugin.objects.all().exclude(pk=gallery.id)
# Get all the images in the chosen gallery
images = gallery.image_field.images
# Filter the list of other galleries so that we don't get galleries
# attached to other pages.
more_galleries = [
g for g in galleries if unicode(g.placeholder.page.id) == page_id
]