Django导航与下拉菜单

时间:2014-06-27 20:34:52

标签: python django

这是我的模板标签文件:

@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使用基础)

1 个答案:

答案 0 :(得分:0)

您目前将菜单设计为树,其中包含指向父级的指针(也称为Adjacency List model)。要计算树,您需要为每个级别执行sql查询以构建树(这非常低效)。上面的那篇文章为您提供了一些如何查询数据以构建树的方法。

您可能希望将菜单存储为高阶数据模型,例如来自django-mptt的MPTTModel。

我建议检查一下实现菜单系统的任何开源项目

Django-CMS就是一个例子,它有一个非常强大的菜单系统。他们将页面存储为MPTTModel,然后从他们的页面构建一个树查询。菜单应用程序然后使用页面中的结构通过模板标记呈现内容

这应该让您了解如何自己实施