如何在多个Django应用程序之间保留一个菜单?

2024-04-24 23:05:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在考虑创建一个基于django的网站,将有一些极其不同的部分到它。我的想法是,这些应该是单独的应用程序,但是我希望它们能够被带到不同的项目中。在

我将有一个从数据库创建的主菜单系统。我希望所有这些网站的不同部分都在这个主菜单系统下,因此,有一个标准的标题。在

网上的大多数例子似乎都说你应该创建一个基本.html模板和菜单,然后让其他所有内容从中继承。我的问题是,就应用程序而言,这似乎不是很便携。我必须使所有的模板继承基本.html,我觉得这会降低它们的便携性?在

我想我要问的是:

在django中创建多个独立应用程序的持久主菜单系统的最佳方法是什么?


Tags: 项目django方法模板数据库应用程序标题内容
2条回答

持久菜单系统

我认为传统的方法是,如你所说,为你的项目创建一个基本模板。如果您希望它对多个应用程序可用,最简单的方法可能是将其放在项目根目录下的模板文件夹中,即myproject/templates/myproject/基本.html. 在此模板中,您将构建菜单系统,然后包含要被子模板覆盖的块:

{% block content %}{% endblock content %}

接下来,在你的应用程序中创建一个名为app_base.html的模板,并简单地放入以下行:

^{pr2}$

此时,您的目录结构应该如下所示:

myproject/
    myproject/
    app_one/
        templates/
            app_one/
                app_base.html
    templates/
        myproject/
            base.html

然后在为该应用程序创建的每个后续模板中,在顶部添加一行:

{% extends "app_one/app_base.html" %}

然后你可以对你创建的每个应用重复这个步骤,这意味着你只需要在你想调整菜单系统时编辑base.html。在

便携性

您在每个应用程序中都创建了app_base.html这一事实应该允许您从任何一个应用程序中取出并将其放到另一个项目中,而不必遍历每个模板并更改它继承的模板的名称。然后您可以简单地编辑app_base.html,使页面的布局与新项目的结构一致。例如,可以通过将新的布局代码直接写入此模板,或者通过更改顶部的extends行来继承新站点的基础模板(请注意,此基本模板必须包含一个content块)。在

注意:当您将templates目录添加到项目根目录时,不要忘记添加以下行:

TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]

到设置.py这样Django就知道在哪里可以找到额外的模板。在

我希望这有帮助。这是我能想到的最好的解决方案,但是我觉得在Django中使用模板继承实现100%的自治可能很困难,因为需要子模板和父模板来保持块之间的一致性。在

Django文档建议的最佳实践是在每个应用程序或页面中使用基本框架并从中继承,并且可以通过重写块使其“可扩展”。在

来自django doc: https://docs.djangoproject.com/en/dev/topics/templates/#template-inheritance

^{bq}$

相关问题 更多 >