我想使用应用程序创建一个易于使用管理界面编辑的菜单。像这样:
class Menu_item
name = models.CharField()
item_url = models.URLField()
我的模板看起来像这样:
{%extends base.html%}
div ID =“nav”
{{ foo.navbar.? }}
/ DIV
div ID =“Content”
{% block content %}{% endblock %}
/ DIV
我希望div#nav包含基于上述模型的ul,但却无法弄清楚如何实现这一点。似乎object_list通用视图会很棒但是,URL会访问填充div #content的模型的视图。有没有人有什么建议?有没有办法在没有URL的情况下访问通用视图?
谢谢。
答案 0 :(得分:0)
首先,在您查看中,从db:
获取数据def index(request):
navbar = Menu_item.objects.all()
return render_to_response( 'you_template.html',
{ 'navbar': navbar }, context_instance = RequestContext (request ) )
在模板中:
<div id="nav">
<ul>
{% for i in navbar %}
<li><a href="{{ i.item_url }}">{{ i.name }}</a></li>
{% endfor %}
</ul>
</div>
答案 1 :(得分:0)
我发现了一个解决方案。包含标签。
我所做的是创建一个包含标记,相当于一个简单的自定义模板标记(django为您提供了一个快捷方式!)。
这是我做的:
mysite/
navbar/
templatetags/
__ init__.py (without the space befire init)
get_navbar.py
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对象
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而不是导航栏)
<ul>
{% for menu_item in navbar %}
<li><a href="{{ menu_item.item_url }}">{{ menu_item.name }}</a></li>
{% endfor %}
</ul>
{% load get_navbar %}
我想要主导航的地方:
{% get_navbar "primary" %}
注意:您要发送到包含标记的字符串周围的引号很重要。在我想出来之前,我花了一大笔时间试图让它工作。
也非常感谢dikamilo的帮助。