Django Python 管理员常驻侧边菜单
我正在用Django搭建一个项目,因为它能让我在更短的时间内完成更多的事情。不过,我遇到了一个问题。我创建了一个菜单,代码如下所示。在首页时,这个菜单可以正常工作,但如果我在其他页面,就会执行if语句中的else部分。我觉得这可能是因为app_list不存在。我想要的是在侧边栏中有一个动态的模型列表,这样我就可以从任何地方快速跳转到任何地方。我不太确定该怎么做,才能让它在每个页面上都有效,因为我希望它出现在我的base.html文件中,这样每个页面都有。
<aside class="sidebar">
<div id="leftside-navigation" class="nano">
<ul class="nano-content">
<li class="active">
<a href="index.html"><i class="fa fa-dashboard"></i><span>Dashboard</span></a>
</li>
{% if app_list %}
{% for app in app_list %}
<li class="sub-menu">
{% for model in app.models %}
<a href="javascript:void(0);"><i class="fa fa-cogs"></i><span>{{ model.name }}</span><i class="arrow fa fa-angle-right pull-right"></i></a>
<ul>
{% if model.admin_url %}
<li><a href="{{ model.admin_url }}">View</a>
</li>
{% endif %}
{% if model.add_url %}
<li><a href="{{ model.add_url }}">{% trans 'Add' %}</a>
</li>
{% endif %}
</ul>
{% endfor %}
</li>
{% endfor %}
{% else %}
<p>{% trans "You don't have permission to edit anything." %}</p>
{% endif %}
</ul>
</div>
</aside>
编辑:
好的,我想更新一下问题,希望能更清楚地表达我想要的。我想要一种持久的模型导航,就像mezzanine提供的那样。点击这个链接,你可能会更好地理解我想要实现的功能。
1 个回答
2
这里是一些文档内容:
编写你自己的上下文处理器
上下文处理器的接口非常简单:它就是一个Python函数,接收一个参数,也就是HttpRequest对象,并返回一个字典,这个字典会被添加到模板的上下文中。每个上下文处理器必须返回一个字典。
你可以创建一个叫做 context_processors.py 的文件,并添加以下内容:
def Foo(request):
return { 'bar': 'Ni!' }
自定义的上下文处理器可以放在你代码的任何地方。Django 只关心你的自定义上下文处理器是否在你的 TEMPLATE_CONTEXT_PROCESSORS 设置中被指向。
在 settings.py 文件中,将你的上下文处理器添加到 TEMPLATE_CONTEXT_PROCESSORS
中:
TEMPLATE_CONTEXT_PROCESSORS += ('context_processors.Foo', )
然后在任何模板中你都可以这样做:
{{ bar }}
这样就会渲染成:
Ni!