Django 模板

**模板基本由两个部分组成,一是HTML代码,二是python逻辑控制代码。
**

M:Model,模型, 和MVC中M功能相同,和数据库进行交互。
V:View,视图, 和MVC中C功能相同,接收请求,进行处理,与M和T进行交互,返回应答。
T:Template,模板, 和MVC中V功能相同,产生html页面。

DTL模板语法
模板中可以包含变量,Django在渲染模板的时候,可以传递变量对应的值过去进行替换。变量的命名规范和Python非常类似,只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数,这个参数是一个字典类型。

模板渲染
模板渲染常用的两种方式:
1、render_to_string
2、render
方法运用代码示例:

1.render_to_string:找到模板,然后将模板编译后渲染成Python的字符串格式。
最后再通过HttpResponse类包装成一个HttpResponse对象返回回去。

from django.http import HttpResponse
from django.template.loader import render_to_string

def book_html(request): 
    html = render_to_string("index.html")
    return HttpResponse(html)

2、render直接将模板渲染成字符串进行包装

from django.shortcuts import render

def book_html(request):
    return render(request, "index.html")

模板查找路径配置
在项目的settings.py文件中。有一个TEMPLATES配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。

1.DIRS:这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板。

2.APP_DIRS:默认为True,这个设置为True后,会在INSTALLED_APPS的安装了的APP下的templates文件加中查找模板。settings.py中INSTALLED_APPS数组中添加你的app名字。

3.查找顺序:比如代码render(‘list.html’)。先会在DIRS这个列表中依次查找路径下有没有这个模板,如果有,就返回。如果DIRS列表中所有的路径都没有找到,那么会先检查当前这个视图所处的app是否已经安装,如果已经安装了,那么就先在当前这个app下的templates文件夹中查找模板,如果没有找到,那么会在其他已经安装了的app中查找。如果所有路径下都没有找到,那么会抛出一个TemplateDoesNotExist的异常。

模板变量

  1. 变量的使用
    {{ username }} #使用双大括号来引用变量
  2. tag的使用
    {% if %}
    {% endif %} #使用大括号和百分号的组成来表示使用Django提供的
    template tag (注意:tag标签要有与之相对应的结束标签)
    {% for item in item_list %}
    {% endfor %}

代码示例:

# pycharm中的代码
def book_second(request):
    content = {
        'lis':{
            "a",
            "b",
            "c"
        },

        'lis_2': {
            "a":12,
            "b":13,
            "c":14
        },

        'lis3':[1,2,3]


    }

    return render(request, "index.html", context=content)

# html中的代码

<!--条件需用空格隔开-->
    {% if "a" in lis%}
        <p>a exist</p>
    {% else %}
        <p>a not exist</p>
    {% endif %}

    <hr>
    {% for keys, values in lis_2.items %}
        <p>{{keys}}:{{values}}</p>
    {% endfor %}

    <hr>
    <!--反转列表-->
    {% for i in lis3 reversed %}
        <p>{{i}}</p>
    {% endfor %}

for tag还提供了一些内置参数来提供模板循环的信息。

  1. forloop.counter 当前循环计数,从1开始
    {% for item in list %}

    {{ forloop.counter }}: {{ item }}

    {% endfor %}
  2. forloop.counter0 当前循环计数,从0开始,标准索引方式
  3. forloop.revcounter 当前循环的倒数计数,从列表长度开始
  4. forloop.revcounter0 当前循环的倒数计数,从列表长度减1开始
  5. forloop.first bool值,判断是不是循环的第一个元素
  6. forloop.last 判断是不是循环的最后一个元素
  7. forloop.parentloop 用在嵌套循环中,得到parent循环的引用,然后可 以使用以上的参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值