这是我的模板标签文件:
@register.inclusion_tag("site/nav_bar.html")
def nav_bar():
nav_bar = Page.objects.filter(navbar=True, parent=Page.objects.filter(slug="home"),).exclude(slug="home",).order_by('order')[:20]
return {
"nav_bar": nav_bar
}
Navbar html:
<ul class="left">
<li><a href="/">Home</a></li>
{% for nav in nav_bar %}
<li><a href="/{{ nav.slug }}">{{ nav.title }}</a></li>
{% endfor %}
</ul>
Models.py的一部分
class Page(models.Model):
title = models.CharField(
max_length=100,
blank=True,
)
slug = models.CharField(
max_length=100,
unique=True,
blank=True,
)
parent = models.ForeignKey(
("Page"),
blank=True,
null=True,
)
如何在主导航栏中添加下拉菜单,我不是在谈论html / css只是在内部循环(我在zurb使用基础)
答案 0 :(得分:0)
您目前将菜单设计为树,其中包含指向父级的指针(也称为Adjacency List model)。要计算树,您需要为每个级别执行sql查询以构建树(这非常低效)。上面的那篇文章为您提供了一些如何查询数据以构建树的方法。
您可能希望将菜单存储为高阶数据模型,例如来自django-mptt的MPTTModel。
我建议检查一下实现菜单系统的任何开源项目
Django-CMS就是一个例子,它有一个非常强大的菜单系统。他们将页面存储为MPTTModel,然后从他们的页面构建一个树查询。菜单应用程序然后使用页面中的结构通过模板标记呈现内容
这应该让您了解如何自己实施