Django框架(三:templates的设置)

模板的渲染:视图函数在返回Response的时候,返回的是一个HTML文件,并且会传递一些数据给HTML,最终将这些数据展示页面中。
Django中提供了一个templates文件夹,用于存放所有的html文件。
templates文件夹的创建位置:

  1. 在项目根目录下创建:这种情况整个项目只有一个templates文件夹,供所有的APP使用;
  2. 分模块,在各自的app下创建templates文件夹。

例:

def index(request):
   # render: 渲染
   # 模板:html文件
   # template_name:指定要渲染的模版的名称。(根据实际情况而定)
   return render(request, template_name='temrender/index.html')

如果是将templates文件夹放在了每一个app下,要注意模板可能会引用错,引用到其他app下的模板文件。
模板的查找书序:

  1. 是先从根目录下的templates文件中查找,如果根目录下没有templates文件夹、获取说根目录下没有找到需要的模板。
  2. 此时Django回去app下的templates中着模板,如果自己app下的templates中没有这个模板,再去其他app下的templates中查找。
  3. 如果最终所有的templates文件中都没有找到所需要的模板,就会抛出异常,说模板问不存在 TemplateDontExisted
    解决办法:在各自app下的templates文件夹中,在创建一个文件夹,用于区分文件夹名相同的html模板文件。
    在这里插入图片描述

那么在渲染模板的时候,如何向模板传递数据呢?
给出如下代码案例:

from django.shortcuts import render
class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return '我的名字是:{}'.format(self.name)

import datetime
def html_data(request):
    """
    如何在渲染模版的时候,向模版传递数据。
    能够传递的数据:
    字符串
    列表
    字典
    对象
    数字类型
    :param request:
    :return:
    """
    p = People('李四', 25)
    
    # context: 上下文,负责向模版传递数据。
    # temrender/index.html: temrender不是代表APP的名称,是templates文件夹下的一个文件夹的名称,这个名称可以随便定义。只是当前是和APP的名称重复了。
    return render(request, template_name='temrender/index.html', context={
        'name': '张三',
        'books': ['HTML', 'JS', 'CSS', 'PYTHON', 100, 200, True],
        'date': datetime.datetime.now(),
        'people': p,
        'dict': {'username': 'haha', 'password': '123'}
    })

接下来就是对templates文件的设置了
在创建的templates文件夹中创建一个.html文件,读取views.py文件中的数据
代码如下:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Django模版渲染</title>
    </head>
    <body>
        <h1>temrender这个APP下的模版</h1>
        {# {{  }}: 作用就是用于加载一个变量的值。name就是变量名称。 #}
        <h1>{{ name }}</h1>
        {# 如果是列表数据,可以通过索引取一个值,也可以通过for循环遍历。jinja2 #}
        <h1>{{ books.0 }}-{{ books.1 }}-{{ books.2 }}-{{ books.3 }}-{{ books.4 }}</h1>
        {# {%  %}: 作用就是用来写for循环、if判断等条件语句的语法。 #}
        {% for book in books %}
            <p>{{ book }}</p>
        {% endfor %}

        {% if people.age < 18 %}
            <p>未成年人</p>
        {% elif people.age < 30 %}
            <p>中年人</p>
        {% else %}
            <p>老年人</p>
        {% endif %}

        {% if name %}
            <p>name变量是存在的</p>
        {% else %}
            <p>name变量不存在</p>
        {% endif %}

        <p>{{ dict.username }}-{{ dict.password }}</p>
        {% for key, value in dict.items %}
            <p>{{ key }}: {{ value }}</p>
        {% endfor %}

        {# 列表的其它两种遍历方式: #}
        {% for book in books %}
            {# forloop.counter: 获取循环的计数 #}
            {# counter: 计数从1开始; 12345 #}
            {# counter0: 计数从0开始; 01234 #}
            {# revcounter: 倒序从7开始计数; 7654321 #}
            {# revcounter0:倒序从6开始计数; 6543210 #}
            <p>{{ forloop.counter }}: {{ book }}</p>
            <p>{{ forloop.counter0 }}: {{ book }}</p>
            <p>{{ forloop.revcounter }}: {{ book }}</p>
            <p>{{ forloop.revcounter0 }}: {{ book }}</p>
        {% endfor %}

    </body>
</html>

别忘了在urls.py文件中设置
在这里插入图片描述
运行结果如下:
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值