Django 模板(Template)

发布于:2025-07-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

1. 模板简介

作为 Web 开发框架,Django 提供了模板,可以很便利的动态生成 HTML。模版系统致力于表达外观,而不是程序逻辑。

模板的设计实现了业务逻辑(view)与显示内容(template)的分离,一个视图可以使用任意一个模板,一个模板可以供多个视图使用。

模板包含:

  • HTML的静态内容
  • 动态插入的内容(Django 模板语言,简写 DTL,定义在 django.template 包中)

由 startproject 命令生成的 settings.py 定义关于模板的值:

  • DIRS 定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件。
  • APP_DIRS 告诉模板引擎是否应该在每个已安装的应用中查找模板。

方式一(常用方式):在项目的根目录下创建 templates 目录,配置 DIRS 值。

DIRS = [os.path.join(BASE_DIR,"templates")]

方式二:在应用的目录下创建 templates 目录,则无需配置 DIRS 值,程序会自动在该目录下寻找模板。

模板处理

Django 处理模板分为两个阶段:

  • Step1 加载:根据给定的标识找到模板然后预处理,通常会将它编译好放在内存中
loader.get_template(template_name)  # 返回一个Template对象
  • Step2 渲染:使用Context数据对模板插值并返回生成的字符串
Template对象的render(RequestContext)方法,使用context渲染模板
  • 加载渲染完整代码:

from django.template import loader, RequestContext
from django.http import HttpResponse

def index(request):
    tem = loader.get_template('temtest/index.html')
    context = RequestContext(request, {})
    return HttpResponse(tem.render(context))

快捷函数

为了减少加载模板、渲染模板的重复代码,Django 提供了快捷函数:

  • render_to_string("")
  • render(request, '模板', context)
from django.shortcuts import render

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

  

2. 模板语言 DTL

模板语言包括:

  • 变量  { { 变量名 }}
  • 标签  { % 代码块 % }
  • 过滤器
  • 注释  {# 代码或html #}

变量

语法:

{
  { variable }}
  • 当模版引擎遇到一个变量,将计算这个变量,然后将结果输出。
  • 变量名只能由字母、数字、下划线(不能以下划线开头)和点组成。
  • 当模版引擎遇到点("."),会按照下列顺序查询:
    1. 字典查询,例如:foo["bar"]
    2. 属性或方法查询,例如:foo.bar
    3. 数字索引查询,例如:foo[bar]
  • 如果变量不存在, 模版系统将插入空字符串。
  • 在模板中调用方法时不能传递参数。
范例:在模板中调用对象的方法
  • 在 models.py 中定义类 HeroInfo 类:
from django.db import models

class HeroInfo(models.Model):
    ...
    def showName(self):
        return self.hname
  • 在 views.py 中传递 HeroInfo 对象:

from django.shortcuts import render
from models import *

def index(request):
    hero = HeroInfo(hname='abc')
    context = {'hero': hero}
    return render(request, 'temtest/detail.html', context)

  • 在模板 detail.html 中调用对象的方法:
{
  {hero.showName}}

标签

语法:

{% 代码块 %}

作用:

  • 在输出中创建文本
  • 控制循环或逻辑
  • 加载外部信息到模板,供以后的变量使用

for 标签

语法:

{% for ... in ... %}
# 循环体中的逻辑
{
  {forloop.counter}}  # 表示当前是第几次循环(从1开始)
{% empty %}
# 给出的列表为空或列表不存在时,执行此处。类似于 else
{% endfor %}  # for 循环的结束标识

示例:

<body>
{% for hero_obj in hero %}
    {
  { forloop.counter }}: {
  {hero_obj.show}}<br/>
{% empty %}
    <h2>啥也没找到...</h2>
{% endfor %}
</body>


1: 郭靖
2: 黄蓉
3: 比伯
4: 王嘉尔
5: 欧阳锋

if 标签

语法&#


网站公告

今日签到

点亮在社区的每一天
去签到