如何在 Django 的 base.html 中插入多个块?

Posted

技术标签:

【中文标题】如何在 Django 的 base.html 中插入多个块?【英文标题】:How do I insert multiple blocks into the base.html in Django? 【发布时间】:2020-08-08 12:27:39 【问题描述】:

可能我误解了Django中模板的继承,但是为什么下面的代码不起作用?两个子模板都从具有不同块名称的父模板继承。

base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>test</h1>

% block index %% endblock %
% block nav %% endblock %
</body>
</html>

index.html

% extends 'blog/base.html' %
% block index %
<h1>This is the index.html page</h1>
% endblock %

nav.html

% extends 'blog/base.html' %
% block nav %
<h1>This is the nav.html</h1>
% endblock %

我通过以下方式访问此模板: urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls'))
]

博客/urls.py:

urlpatterns = [
    path('', views.home, name='home'),
    path('nav/', views.home, name='nav')
]

blog/views.py

def home(request):
    return render(request, 'blog/index.html')

使用以下网址:

localhost:8000/blog

HTML 输出:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>test</h1>


<h1>This is the index.html page</h1>


</body>
</html>

我正在尝试掌握使用多个块的概念,以便可以将它们放置在我需要的模板上。

【问题讨论】:

你说它不起作用是什么意思?你是如何访问这个模板的,什么不完全有效?您确定“blog/base.html”的路径正确吗? 我已编辑以显示我如何访问它 改用include ***.com/questions/48497062/…的可能重复 对不起,你能说得具体一点吗? 【参考方案1】:

您不能在一个 HTTP 请求中呈现两个视图。要包含来自不同模板的内容,只需将include 用于nav.html,如果它不会被独立调用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>test</h1>
% include 'nav.html' %
% block index %% endblock %
</body>
</html>

【讨论】:

以上是关于如何在 Django 的 base.html 中插入多个块?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 的 base.html 中插入多个块?

如何将样式添加到 base.html:Django 框架?

如何在html文件中加载css文件已经在django中扩展了另一个html文件(base.html)

Django:在 django admin 中扩展 base.html

如何在不通过视图在所有页面中发送表单的情况下从 django 布局(如“base.html”)获取表单数据?

django cms - 如何使占位符可以从 base.html 继承