Django Python 管理员常驻侧边菜单

0 投票
1 回答
2029 浏览
提问于 2025-04-18 12:02

我正在用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!

撰写回答