django-cms apphook + menu

时间:2012-03-13 15:51:14

标签: django django-cms

django-cms 2.2,django 1.3.1

我正在创建一个名为gallery的应用。 Gallery里面有照片。 (有很多画廊)

我有以下结构:

  • cms_app.py - 图库的apphook(图库详细信息需要(图库内的照片)视图)
  • cms_plugins.py - 画廊列表的插件
  • menu.py - 每个图库都有自己的页面(galery中的照片),我们在这里生成菜单
  • views.py - 图库详情(内部照片)
  • urls.py - // applook为视图内的照片附加的网址,name=gallery_details

网址结构:

  • /gallery-list/ - 画廊列表页面
  • /gallery-list/1/ - pk = 1 gallery
  • 的照片
  • /another-gallery-list/ - 图库列表的另一页
  • /another-gallery-list/1/ - pk = 1图库的照片(与/gallery-list/1/相同但不同的网址)

django-cms页面结构:

  • 使用apphook = gallery app hook +插件页面/gallery-list/获取图库列表
  • 使用apphook = gallery app hook +插件的页面/another-gallery-list/用于图库列表(相同但不同的实例)

菜单:

  • 画廊
    • 图库1
  • 另一家画廊
    • 图库1

问题:如何为这些图库生成菜单?

目前我正在创建CMSAttachMenu并生成节点(来自模型)。我如何制作网址?我正在尝试使用reverse('gallery_details', args=[self.pk])get_absolute_url方法),但它给了我网址:/galleries/<id>/。我希望得到的是/gallery-list/1//another-gallery-list/1/,具体取决于附加 apphook 的网页。

以下是我正在使用的文档:http://docs.django-cms.org/en/2.2/extending_cms/app_integration.html#app-hooks

非常感谢帮助。

1 个答案:

答案 0 :(得分:0)

以下内容应该有效。当有项目列表和项目详细信息页面时,我为Project应用做了类似的事情。

class GalleryMenu(CMSAttachMenu):
    name = _("Gallery Menu")
    def get_nodes(self, request):
        c=itertools.count()
            nav = [
                NavigationNode(
                  _(g.title),
                  reverse("gallery_detail", kwargs={ 'slug' : g.slug }),
                  next(c), parent_id=0
                )
            for i,g in enumerate(Gallery.objects.all()) ]
    return nav