Django 模板

创建一个模板

首先,在 polls 目录里创建一个 templates 目录。Django 将会在这个目录里查找模板文件。

mysite/settings.py 的 TEMPLATES 配置项描述了 Django 如何载入和渲染模板。默认的设置文件设置了 DjangoTemplates 后端,并设置 APP_DIRS =True。这一选项将会让 DjangoTemplates 在每个 INSTALLED_APPS 文件夹中寻找 templates 子目录。

新建一个模板文件 polls/templates/polls/index.html,并添加如下代码:

{% if question_list %}
    <ul>
    {% for question in question_list %}
        <li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}

然后,我们在 polls/views.py 里创建一个 index() 视图函数来使用模板:

def index(request):
    question_list = Question.objects.all()
    return render(request, 'polls/index.html', {'question_list': question_list})

render() 函数把 request 对象作为它的第一个参数,模板作为第二个参数,字典作为可选的第三个参数。传递给模板一个 HttpResponse 对象。

最后将新视图添加进 polls.urls 模块:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
]

模板语言

模板是由HTML代码和逻辑控制代码组成,用来分离一个文档(通常是HTML)的表现形式和内容。

1. 变量

变量的形式: {{ variable }}

使用 "." 访问变量的属性。

当 templates 引擎遇到变量时,引擎使用变量的值代替变量。当 templates 引擎遇到 "." 的时候,会按照如下顺序查询:

  1. 字典查询,比如 foo["bar"]
  2. 属性或方法查询,比如 foo.bar 或 foo.bar()
  3. 数字索引查询,比如 foo[bar]

如果变量不存在,模版系统将插入空字符串。在模板中调用方法时,不能传递参数给方法。

2. 标签

标签的形式: {% tag %}

(1)if 标签

{% if 判断条件 %}
    执行语句
{% elif 判断条件 %}  #可选
    执行语句
{% else %}  #可选
    执行语句
{% endif %}

{% if %} 标签接受 and,or 或 not 关键字来对多个变量做判断。在同一个标签中可以同时使用 and 或同时使用 or,但不能混合使用。

(2)ifequal/ifnotequal 标签

{% ifequal %} 标签比较两个值,如果他们相等,显示在 {% ifequal %} 和 {% endifequal %} 之间的所有代码。

(3)for 标签

{% for ... in ... %}
    执行语句
{% empty %}  #可选
    执行语句
{% endfor %}

在{% for %}标签中,可以访问 forloop 变量,该变量有几个常用的属性:

forloop.counter:表示当前循环执行次数的计数器,从1开始。

forloop.counter0:表示当前循环执行次数的计数器,从0开始。

forloop.revcounter:表示当前循环剩余的元素数量,最后一次循环时,值为1。

forloop.revcounter0:表示当前循环剩余的元素数量,最后一次循环时,值为0。

forloop.first:布尔值,是否为第一次循环。

forloop.last:布尔值,是否为最后一次循环。

forloop.parentloop:是一个指向当前循环的上一级循环的 forloop 对象的引用(嵌套循环)。

注意,forloop 变量只在循环内部可用。模板解析器遇到 {% endfor %} 时,forloop 随之消失。 

(4)注释标签

单行注释:{# 这是一个注释 #}

多行注释:{% comment %} 和 {% endcomment %}

(5)include 标签

{% include %} 标签允许在模板中包含其它的模板的内容。

(6)csrf_token 标签

{% csrf_token %} 标签用于跨站请求伪造保护。

(7)filter 标签

{% filter %} 标签通过一个或多个过滤器对内容过滤,多个过滤器使用管道符号相连接,且过滤器可以有参数。

(8)autoescape 标签

{% autoescape off %} 用于某块内容不需要自动转义。

(9)block 标签

{% block %} 定义一个块,该块能够被继承他的子模板重写。

(10)extends 标签

{% extends %} 子模块用来继承父模块。

(11)url 标签

{% url %} 引用路由配置的地址。

(12)load 标签

{% load staticfiles %} 加载静态文件。

3. 过滤器

模板过滤器可以在变量显示前修改它,过滤器使用管道字符,比如:{{ name|lower }}

模板继承

模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载。模板引擎发现了 {% extends %} 标签, 注意到该模板是一个子模板,模板引擎立即装载其父模板。

 

转载于:https://www.cnblogs.com/yutb/p/10569977.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值