【问题标题】:django-cms apphook + menudjango-cms apphook + 菜单
【发布时间】:2012-03-30 01:20:13
【问题描述】:

django-cms 2.2,django 1.3.1

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

我有以下结构:

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

网址结构:

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

django-cms 页面结构:

  • 页面 /gallery-list/ 带有 apphook = 画廊应用挂钩 + 画廊列表插件
  • 页面 /another-gallery-list/ 带有 apphook = 画廊应用挂钩 + 画廊列表插件(相同但不同的实例)

菜单:

  • 画廊
    • 画廊 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

非常感谢您的帮助。

【问题讨论】:

    标签: django django-cms


    【解决方案1】:

    类似下面的东西应该可以工作。当有一个项目列表和一个项目详细信息页面时,我为 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
    

    【讨论】:

    • 这正是我正在做的。问题是 reverse('gallery_details', args=[gallery.pk]) 返回 /gallery/1/ 并且应该返回 /gallery-list/1/ 或 /another-gallery-list/1/
    • 你能发布你的urls.py吗? gallery 和 gallery-list 应该是每个画廊所附加到的页面的 URL。然后,在您的图库应用程序urls.py 中,gallery_detail url 应该类似于 url('^(?P<id>\d+)/$', 'gallery.views.detail', 'gallery_detail') 而不是 url('^gallery/(?P<id>\d+)/$', 'gallery.views.detail', 'gallery_detail') 这通常是
    • urls.py 中的确切行是:url(r'^(?P<gallery_id>\d+)/$','list', name='gallery_details'),
    猜你喜欢
    • 2011-07-26
    • 2018-11-04
    • 2019-01-14
    • 2013-05-09
    • 2015-09-04
    • 2012-03-28
    • 2017-11-15
    • 2011-07-26
    • 2015-03-28
    相关资源
    最近更新 更多