我已经为我的自定义应用程序创建了一个页面和应用程序钩子,现在我需要知道如何将此应用程序与默认面包屑集成。我找到的只是官方文档中的导航修饰符。但是这些例子对我来说还不够描述,我不知道如何在我的情况下使用它们。假设我有这样的模型:
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 处理,或者您正在使用导航扩展器,则可能需要通过模板提供自己的痕迹导航。这主要用于登录、注销和第三方应用程序等页面。