如何集成自定义应用以使用痕迹导航



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

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/ 这样的 url 来显示类别中的所有帖子,并使用/category.slug/post.id来显示帖子的内容。

像这样使用导航修饰符。

在 myapp/菜单中.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

正如 django-cms 文档所说:

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

最新更新