如何集成自定义应用程序以使用面包屑?

时间:2013-12-21 15:40:57

标签: django navigation django-cms breadcrumbs

我为自定义应用程序创建了一个页面和app-hook,现在我需要知道如何将此应用程序与默认的面包屑集成。我在官方文档中找到的只是导航修改器。但这些例子对我来说不够具有描述性,我不知道如何在我的案例中使用它们。 假设我有这样的模型:

class Category(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=30)

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    category = models.ForeignKey(Category)

我使用/category.slug/等网址显示类别中的所有帖子,/category.slug/post.id显示帖子的内容。

2 个答案:

答案 0 :(得分:1)

使用像这样的导航修改器。

在myapp / menu.py中:

from menus.base import NavigationNode
from menus.menu_pool import menu_pool
from cms.menu_bases import CMSAttachMenu
from models import Category, Post

class CategoryMenu(CMSAttachMenu):

    name = ("Category Menu")

    def get_nodes(self, request):
        nodes = []

        for category in Category.objects.all():
            node = NavigationNode(
                category.title,
                category.get_absolute_url(),
                category.pk,
            )
            nodes.append(node)
            for post in Post.objects.filter(category=category):
                node2 = NavigationNode(
                    post.title,
                    post.get_absolute_url(),
                    post.pk,
                    category.pk
                )
                nodes.append(node2)
        return nodes

menu_pool.register_menu(CategoryMenu)

现在,您可以选择挂钩应用的页面菜单,并在模板中显示面包屑。

哦,你必须将get_absolute_url添加到模型中: https://docs.djangoproject.com/en/dev/ref/models/instances/#get-absolute-url

答案 1 :(得分:0)

正如django-cms documentation所说:

  

如果当前网址未由CMS处理,或者您正在使用导航扩展程序,您可能需要通过模板提供自己的面包屑。这主要用于登录,注销和第三方应用等页面。