我为自定义应用程序创建了一个页面和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
显示帖子的内容。
答案 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)
如果当前网址未由CMS处理,或者您正在使用导航扩展程序,您可能需要通过模板提供自己的面包屑。这主要用于登录,注销和第三方应用等页面。