【问题标题】:How do I insert multiple blocks into the base.html in Django?如何在 Django 的 base.html 中插入多个块?
【发布时间】: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
  • 对不起,你能说得具体一点吗?

标签: python django


【解决方案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>

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多