Django项目基础模板

ryoqjall  于 2023-01-06  发布在  Go
关注(0)|答案(5)|浏览(98)

我可以为我的项目创建一个所有应用程序都可以使用的基础模板吗?或者我必须为每个应用程序创建一个基础模板吗?如果我希望它们相同,我只需复制它们即可?

ffscu2ro

ffscu2ro1#

当然可以。一个简单的base.html示例

<!DOCTYPE html>
<html>
    <head>
        <title>My Project</title>
    </head>

    <body>
    {% block content %}{% endblock content %}
    </body>
</html>

假设您有一个名为myapp的应用程序,其中包含一个view.html页面,

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
{% endblock content %}

请花些时间阅读文档以了解详细信息

3df52oht

3df52oht2#

对于Django版本3
这里的一些答案是正确的,但是它们没有告诉你在目录结构中放置文件的位置,所以我将稍微解释一下答案。
可以,您可以使用{% extends "base.html" %}从项目目录扩展base.html文件。

需要注意的重要事项是放置base.html文件的位置。

1.打开project_name/project_name/settings.py并找到TEMPLATES数组
并将'DIRS' : []更新为'DIRS': [os.path.join(BASE_DIR, 'templates')]
1.在根级别创建名为templates的目录。此文件夹的位置为project_name/templates
1.将所有模板放在projects_name/templates中,您希望从所有应用程序访问这些模板。
文件:project_name/templates/base.html
1.使用{% extends "base.html" %}从任何特定于应用程序的模板(可能位于project_name/app_name/templates/app_name/template_file.html)扩展此基本文件。

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
{% endblock content %}

此外,还可以通过在project_name/project_name/settings.py中将STATICFILES_DIRS更新为STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")],在与模板目录相同的级别创建项目范围的static目录。
最终目录结构如下所示-

project_name/
    app_name/
        templates/
            app_name/
                template_file.html

    project_name/
        settings.py

    templates/
        base.html

    static/
        css/
        js/
        img/
1qczuiv0

1qczuiv03#

上一个答案有问题,下面是正确答案;你必须有这样的Base.html:

{% load staticfiles %}

<!DOCTYPE html>
<html>
<head>
    <title>My Project</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>

也适用于index.html

{% extends "appname/base.html" %}
{% block content %}
     <h1>test</h1>
{% endblock %}
2nbm6dog

2nbm6dog4#

是的,你完全可以做到。通过在Django模板中使用extendsinclude模板标签。
我刚开始学习Django,最近才发现这一点。我的代码在Github,如果你有兴趣看看我是如何构造Django模板来继承base.htmlinclude的常见内容,如导航栏和页眉,页脚等。

f8rj6qna

f8rj6qna5#

是的,你可以为你的项目创建一个基础模板,其他应用程序将扩展该模板。请查看@Kenny_Shen回答。
如果您担心应用程序隔离,我只想补充两点。
1.如果您不希望您的应用依赖于“base.html”命名约定,您可以使用变量注入实际名称,请参阅:如何使用Django的template extends变量?了解详情
1.您可能希望将应用模板块命名为其他名称,而不是“content”,以避免与其他应用冲突。

相关问题