模板加载与模板渲染
实际上django的HTML渲染是这样的,开发者首先写好网站静态的部分,这部分是HTML代码,然后使用python语法,将动态数据填写上去,那么在这里,把加载HTML部分叫做加载部分,动态数据填写部分叫做渲染部分。两者结合叫做django的模板系统。下面为简单的模板渲染。
from django.template import Template,Context
from django.http import HttpResponse
def say_hobby(request):
string = """
<html>
<head>
<title>
index
</title>
</head>
<body>
<p>hello I am {{ name }}, I like :</p>
{% for h in hobby %}
<p style="color:red">{{ h }}</p>
{% endfor %}
</body>
</html>
""" #只是一个字符串
# 模板的语法{{ }} {% %}
dicts = {
"name": "老边",
"hobby": [
"eat",
"sing",
"python",
"linux"
]
} #只是一个字典数据
t = Template(string) #构建模板结构
c = Context(dicts) #构建渲染结构
result = t.render(c) #进行数据渲染
return HttpResponse(result) #返回结果
模板语法
Django自带模板渲染的规则,分为三种变量,标签,过滤器。
1,变量 {{ }},就是从视图函数当中渲染的变量,最基本的变量可以是字典键映射的值。
字典的值是多样的,可嵌套的,所以,变量有以下用法
① 变量是字典类型,可以以键取值
② 变量是有序的序列类型,变量可以通过索引进行取值
③ 变量是对象,可以调用没有参数的方法
2,循环标签 {% %},具有某种语法的逻辑
①循环标签{% for %}。。。{% endfor %}
forloop与嵌套循环,Forloop是django模板系统自带的一个变量,作用于循环内部,记录着每次循环的次数。依靠这些可以对循环内部东西进行具体的控制,通常和if判断标签进行连用。Forloop可以记录嵌套循环当中的父循环。
②判断标签{% if %}。。。{% else %}。。。{% endif %}
{% endifequal %}判断两个值是否相等
3,过滤器{{ | }},对变量进行筛选,过滤器更多的精力需要集中在自定义过滤器。
Safe 让前面传递的代码可以执行前端注入,就是通过input框或者其他手段向页面提交js脚本或者前端代码。Django自动过滤前端注入代码,通常通过视图返回的字符如果含有代码会自动转义。
加载HTML页面
修改配置