私は解決策を発見しました。包含タグ。
私がしたことは、単純なカスタム テンプレート タグに相当する包含タグを作成することでした (django はショートカットを提供します!)。
これが私がしたことです:
views.py を無視 - この場合は使用されません
init .py と get_navbar.py (またはタグにしたいもの)を含む「templatetags」という名前のサブディレクトリをアプリのディレクトリに作成します。
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 ではなく 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にも感謝します。