python - 如何在多个 Django 应用程序中保留一个菜单?

标签 python django

<分区>

我正在考虑创建一个基于 django 的网站,该网站将包含一些截然不同的部分。我的想法是这些应该是单独的应用程序,但我希望这些应用程序能够用于不同的项目。

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

大多数在线示例似乎都在说您应该使用菜单创建一个 base.html 模板,然后让其他所有内容都继承自该模板。我的问题是,就应用程序而言,这似乎不太便携。我必须让所有模板都继承自 base.html,我觉得这会降低它们的可移植性吗?

我猜我想问的是:

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

最佳答案

永久菜单系统

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

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

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

{% extends "myproject/base.html" %}
{% block content %}{% endblock content %}

此时你的目录结构应该是这样的:

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 block )。

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

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

到 settings.py 以便 Django 知道在哪里可以找到额外的模板。

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

关于python - 如何在多个 Django 应用程序中保留一个菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531790/

相关文章:

python - 查询中外键的最大出现次数

python - Django session 翻译设置对所有语言都是粘性的,除了中文?

用于运行 shell 命令的 Python 脚本

python - 在我的 Qt C++ 应用程序中使用 Anaconda 的 Python

python - 由于某种原因它只显示一个 if 语句

python - Django timezone.make_aware 为 2014-10-26 1 :45:00 引发了 AmbiguousTimeError

Python - Django - 从开始日期开始过滤并计算第一年的所有人

python - 云函数获取 `getIamPolicy`的访问 token

python - TCP 线程 python 服务器未按预期处理信号

python - Django 操作错误 1405 在syncdb上