如何在 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 中插入多个块?
如何在html文件中加载css文件已经在django中扩展了另一个html文件(base.html)
Django:在 django admin 中扩展 base.html