当前位置:   article > 正文

Django HTML 模板继承_html extend

html extend

1 写在前面

在使用 Django 构建 Web 应用时,HTML 模板继承能够更加灵活和有效地管理和组织前端代码。通过继承,我们可以在不同的页面之间共享相同的结构和布局减少代码冗余,提高可维护性。本文将讲述 Django 中的 HTML 模板继承,并以示例讲解具体的使用方法。

需要说明的是,笔者在web开发时希望导航栏内容保持不变,而修改网页主体的内容,尝试了在页面底部引入 jQuery,并添加用于异步加载的脚本,但这样的方法稍显复杂,其实对于这类问题继承就可以搞定了。

2 基础概念

2.1 模板继承的作用

HTML 模板继承允许我们创建一个基础模板(base template),其中包含页面的共同结构和布局,然后在其他模板中继承这个基础模板,并根据需要覆盖或扩展特定部分。这样,我们就能够在整个应用中维护一致的外观,同时方便地调整或添加特定页面的内容。

2.2 基础模板的创建

在 Django 中,我们可以在基础模板中使用 {% block %} 标签来标识可被继承的块(block)。这些块可以在子模板中被覆盖,或者通过 {% block %}{% endblock %} 标签之间的内容进行扩展。

3 示例讲解

为了示例的完整性,以及便于初学者能够有一个系统的认识,笔者从django项目创建开始,手把手开始演示:

步骤一:创建 Django 项目

首先,打开终端或命令提示符,导航到你想要创建项目的目录,然后运行以下命令:

django-admin startproject async_loading_demo

这将创建一个名为 async_loading_demo 的 Django 项目目录。

步骤二:创建 Django 应用

进入项目目录,并创建一个 Django 应用,这里称为“main_app”:

  1. cd async_loading_demo
  2. python manage.py startapp main_app

步骤三:定义 Django 视图

main_app/views.py 文件中定义视图:

  1. from django.shortcuts import render
  2. def home(request):
  3. return render(request, 'home.html')
  4. def about(request):
  5. return render(request, 'about.html')
  6. def contact(request):
  7. return render(request, 'contact.html')

步骤四:定义 Django 模版

首要的是

在main_app目录创建templates文件夹,然后在django项目目录async_loading_demo下的setting.py中添加应用名称,如下:

  1. # Application definition
  2. INSTALLED_APPS = [
  3. "django.contrib.admin",
  4. "django.contrib.auth",
  5. "django.contrib.contenttypes",
  6. "django.contrib.sessions",
  7. "django.contrib.messages",
  8. "django.contrib.staticfiles",
  9. "main_app", # 把刚刚创建的应用添加到这里,否则模版文件是无法匹配到的
  10. ]

创建基础模板

  1. <!-- base.html -->
  2. <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>{% block title %}Async Loading Demo{% endblock %}</title>
  8. </head>
  9. <body>
  10. <nav>
  11. <a href="{% url 'home' %}" class="main-link">Home</a> |
  12. <a href="{% url 'about' %}" class="main-link">About</a> |
  13. <a href="{% url 'contact' %}" class="main-link">Contact</a>
  14. </nav>
  15. <!-- 页面内容区域 -->
  16. <main id="content">
  17. {% block content %}{% endblock %}
  18. </main>
  19. </body>
  20. </html>

创建待继承base.html的模版

这里我们创建三个模版,home.html、about.html、contact.html,如下:

home.html

  1. {% extends 'base.html' %}
  2. {% block title %}Home{% endblock %}
  3. {% block content %}
  4. <h1>Home Page</h1>
  5. {% endblock %}

详细解释:

  1. {% extends 'base.html' %}这是继承模板的声明。前面我们已经创建了一个基础模板base.html,其中包含整个网站的共同结构和样式,所以现在可以继承这个基础模板,填充具体内容。
  2. {% block title %}Home{% endblock %}:这是一个块(block)的定义。块是在继承模板中定义的可以被子模板填充的区域。在这个例子中,title 是一个块的名称,用于定义页面的标题。在子模板中,我们可以通过在块中提供内容来填充这个区域。这里我们使用 {% block title %}Home{% endblock %},那么 title 这个块的内容将被替换为 "Home",而不是基类模版的“Async Loading Demo”。
  3. {% block content %}...{% endblock %}: 同样是一个块的定义,这次是用于填充页面的主体内容。在这个例子中,content 是主体内容块的名称。 在子模板中,我们可以在块中提供具体的 HTML 内容,替换掉基础模板中相同块的内容。这样,每个子模板可以有自己独特的主体内容。比如我们这里的主体内容就是“Home Page”。

about.html

  1. {% extends 'base.html' %}
  2. {% block title %}About{% endblock %}
  3. {% block content %}
  4. <h1>About Page</h1>
  5. {% endblock %}

contact.htm

  1. {% extends 'base.html' %}
  2. {% block title %}Contact{% endblock %}
  3. {% block content %}
  4. <h1>Contact Page</h1>
  5. {% endblock %}

步骤五:配置 URL 路由

main_app/urls.py 文件中定义 URL 路由:

  1. from django.urls import path
  2. from . import views
  3. urlpatterns = [
  4. path('', views.home, name='home'),
  5. path('about/', views.about, name='about'),
  6. path('contact/', views.contact, name='contact'),
  7. ]

async_loading_demo/urls.py 文件中包含应用main_app的 URL 路由:

  1. from django.contrib import admin
  2. from django.urls import include, path
  3. urlpatterns = [
  4. path('admin/', admin.site.urls),
  5. path('', include('main_app.urls')),
  6. ]

步骤六:运行 Django 项目

在项目根目录下运行:

python manage.py runserver

然后在浏览器中访问http://127.0.0.1:8000/,收官!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/769138
推荐阅读
相关标签
  

闽ICP备14008679号