Django 模板
Django 使用 模板语言 的目的是使前端代码与后端代码分离(解耦)
模板语言 = html + 逻辑控制语句
模板语言参数解释:
向HTML 中的time 变量赋值
其中:
第一个参数是 request 对象
第二个参数是模板
第三个参数是上下文
return render(request,"cur_time.html",{"time":ctime})
模板语法:
1. {{变量名}} , 示例如下:
后台:
def cur_time(request): ctime=datetime.datetime.now() #向HTML 中的time 变量赋值 #其中: # 第一个参数是 request 对象 # 第二个参数是模板 # 第三个参数是上下文 return render(request,"cur_time.html",{"time":ctime})
前端:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>当前时间:{{ time }}</h1> </body> </html>
2. . ,通过.可以获取一个列表中的值
后台:
def template2(req): s1=[1,2,3] return render(req,"t2.html",{"list":s1})
前端(list.2 的意思是获取list 下标为2 的元素,结果是3 ):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t2</title> </head> <body> <h1>template</h1> {{ list.2 }} </body> </html>
获取字典中的值:
后台:
def template3(req): s2={"name":"aa","age":20} return render(req,"t3.html",{"obj":s2})
前台(通过obj.name 获取name 的值,结果为aa):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t3</title> </head> <body> <h1>template</h1> {{ obj.name }} </body> </html>
获取一个对象的属性:
后台:
def template4(req): ctime = datetime.datetime.now() return render(req,"t4.html",{"ctime":ctime})
前端(获取当前时间的年的属性,结果是2018):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t4</title> </head> <body> <h1>template</h1> {{ ctime.year }} </body> </html>
3. 逻辑判断,循环
后台:
def template5(req): ctime = datetime.datetime.now() s2 = {"name", "aa", "age", 20} return render(req,"t5.html",{"ctime":ctime,"obj":s2})
前台:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t5</title> </head> <body> <h1>template</h1> {# if语句的使用#} {% if ctime%} <h1>if</h1> {% elif 1%} <h1>elif</h1>> {% endif %} {% for foo in obj %} {# 拿数据的索使用{{ forloop.counter }}#} <h1>{{ forloop.counter }}:{{foo}}</h1> {% endfor %} </body> </html>
表单提交{% csrf_token %}
HTML 文件:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t7</title> </head> <body> <h1>template</h1> <form action="/t7/" method="post"> <input type="text" name="user"> <input type="text" name="pwd"> <input type="submit" value="submit"> {# 当有 form表单提交的时候,Django会有跨站请求攻击的防护措施,配置在settings 的MIDDLEWARE 中:'django.middleware.csrf.CsrfViewMiddleware',#} {# 为了可以让表单可以正常提交,又不注释settings文件,可以用下边的方法,添加 {% csrf_token %}#} {% csrf_token %} </form> </body> </html>
4.filter
后台:
def template6(req): s="heLLo" s6=6 s1="<a href='#'>link</a>" return render(req,"t6.html",{"str":s,"sInt":s6,"s1":s1})
前台:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>t6</title> </head> <body> <h1>template</h1> {#将str内容变成大写#} {{ str|upper }} {# 将str转成小写#} {{ str|lower }} {#首字母大写#} {{ str|capfirst }} {# 把sInt 的值加5#} {{ sInt|add:5 }}
{# 在str前添加一个斜杠,一般str是路径的时候会这样处理#}
{{ str|addslashes}} {# 把s1中的存储的标签字符串在界面中渲染#} {% autoescape off%} {{s1}} {% endautoescape %} {# 把s1中的存储的标签字符串在界面中渲染第二种写法,推荐用这种方法#} {{ s1|safe }} </body> </html>
5.取消渲染
添加在 {% verbatim %}{% endverbatim %} 之间的代码不会被渲染,下边的例子显示为:{{name}} , 而不是变量name的值
{% verbatim %}
{{ name }}
{% endverbatim %}
posted on 2018-06-29 21:36 gaizhongfeng 阅读(147) 评论(0) 编辑 收藏 举报