“ templates 模板,用于在浏览器显示的部分,Django有一套前端的语法规则,组合起来就是所谓的 前端。
需要了解一点的前端知识,本示例以用户登录为例,前端部分不做多讲。”
与 views 交互,然后在前端页面呈现
views通过 return render(request, '.html', {}) 中最后的字典形式将数据传送给templates中
由于在配置篇中配置了 static 的文件所以在使用templates中可以在html文件中加上,这样html就可以直接使用静态文件了
{% load static %}
接上篇,可以看到是一个叫做 login.html 的文件
所以需要在 templates 下新建 > login.html
(HTML:How To Make Love 不知道的请自行学习)
login.html 关键代码
{% for msg in messages %} <p>{{ msg }}p>{% endfor %}<form action="" method="post"> {% csrf_token %}{% for field in login_form %} {{ field }} <p>{{ field.errors.as_text }}p>{% endfor %}<span> {{ form.non_field_errors }}span> <button type="submit">登 录button>form>
{# 如果是上传文件的表单需要加上 enctype #} "" method=
模板语法
{{ a }}{% if 条件 %}{% elif 条件 %}{% endif %}{% ifequal user currentuser %} <h1>Welcome!h1>{% endifequal %}{% for i in list %}{{ forloop.counter }}{{ i }}{% endfor %}
关系比较操作符:>、 =、 <=、 ==、 !=
逻辑运算:not、 and、 or、 in、 not in
for 循环获取索引:
forloop.counter 索引从1开始算
forloop.counter0 索引从0开始算
forloop.revcounter 索引最大长度到1
forloop.revcounter0 索引最大长度到0
forloop.first 当遍历元素为第一项时为真
forloop.last 当遍历元素为最后一项时为真
forloop.parentloop 用在嵌套for中,获取上一层for的forloop
当列表中可能为空值用 for empty
{% for i in list %} <li>{{ i }}li>{% empty %} <li>抱歉,列表为空li>{% endfor %}
模板过滤器
关闭模板转义:safe
{{ "<h1>Hello Worldh1>" | safe }}
转义:autoescape
{% autoescape off/on %}{{ 模板变量 }}{% endautoescape %}
默认值:default
{{ value | default:"nothing" }}
default_if_none
{{ value | default_if_none:"nothing" }}
大小写转换
{{ 'lower' | lower }}{{ 'UPPER' | upper }}
显示前n个字:truncatewords
{{ 'asdfghjkl' | truncatewords:"5" }}
add
{{ 12 | add:"5" }} {{ [1,2,3] | [4,5,6] }}
单引号加上转义号
{{ "AB'CD" | addslashes }}
capfirst 大写变量的第一个字母
{{ 'django' | capfirst }}
center 给定的宽度范围内居中
{{ 'django' | center:"15" }}
cut 移除字符中所有参数相同的字符串
{{ 'String Django Spaces' | cut:" " }}
date 格式化日期变量
{{ date | date:"D d M Y" }}{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
模板之间的关系
继承
通常一些网页在不同页面跳转中有相同的元素,可以使用继承来代替相同的元素
相同的元素使用一个html,其他html继承这个html
子模板html不需要写html,head,body等元素
父模板
<html lang="en"><head> <meta charset="UTF-8"> <title>templatestitle>head><body> {% block navbar %} <h1>{{ title }}h1> {% endblock %} {% block content %} {% endblock %}body>html>
子模板
{% extends 'base.html' %}{% block navbar %}{{ block.super }}<h1>子模板自己的navbarh1>{% endblock %}{% block content %}{% endblock %}
包含
略