我发现了一个解决方案。包含标签。
我所做的是创建一个包含标签,它相当于一个简单的自定义模板标签(django 为您提供了一个快捷方式!)。
这是我所做的:
忽略views.py - 在这种情况下不会使用它
在应用程序的目录中创建一个名为“templatetags”的子目录,其中包含init .py 和 get_navbar.py(或任何您想要的标签):
mysite/
navbar/
templatetags/
__ init__.py (without the space befire init)
get_navbar.py
我将 navbar.models 更改为如下所示:
from django.db import models
class Menu_choice(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Menu_item(models.Model):
name = models.CharField(max_length=20)
navbar = models.ForeignKey(Menu_choice)
item_url = models.CharField(max_length=200)
item_desc = models.CharField(max_length=30)
def __unicode__(self):
return self.name
这允许我在管理界面中为每一层导航(主要、次要等)创建一个 Menu_choice 对象
get_navbar.py 看起来像这样:
from navbar.models import Menu_choice, Menu_item
from django import template
register = template.Library()
@register.inclusion_tag('navbar/navbar.html')
def get_navbar(navBar):
navbar = Menu_item.objects.filter(navbar__name=navBar)
return { "navbar": navbar }
(注意导航栏而不是导航栏)
创建 navbar.html 模板:
<ul>
{% for menu_item in navbar %}
<li><a href="{{ menu_item.item_url }}">{{ menu_item.name }}</a></li>
{% endfor %}
</ul>
最后,我将以下内容插入到我的 base.html 中:
{% load get_navbar %}
我想要主要导航的地方:
{% get_navbar "primary" %}
注意:您发送到包含标签的字符串周围的引号很重要。在我弄清楚之前,我花了很长一段时间试图让它工作。
也非常感谢 dikamilo 的帮助。