django模板
程序员文章站
2022-04-26 17:37:12
...
变量
{{ var }}
过滤器 在变量显示之前修改它
{{ var | 过滤方式 }}
{{ str | lower }} 小写
{{ str | capfirst }} 第一个字母大写
{{ str | title }} 将单词的第一个字母大写
{{ str | center: "50" }}
{{ str | safe }} 可以一个html格式的字符串解析后显示
{{ list | join: "-" }}将list中的每一项都用 - 连接起来显示
{{ list | first}} 显示list中的第一个元素
{{ list | length }} 返回列表长度
{{ list | slice: ":2"}} 切片操作获取了前两项
{{ list | dictsort }} 将列表从小到大排序后显示
{{ list | random }} 随机显示列表中的一个值
标签
{% tag %}
for
{%for stu in stus%}
遍历操作
<td>{{stu.name}}</td>
获取循环次数
从1开始计数,每次循环会加一 forloop.counter0从0开始计数
{{forloop.counter}}
如果是第一次循环就返回true否则返回false同样的有last
{{forloop.first}}
当列表为空时,会执行empty后面的语句
{% empty %}
<li>没有学生!</li>
{% endfor%}
if
{% if a==1 %}
if
{% elif a==2 %}
elif
{% else %}
else
{% endif %}
include
在 index.html中调用head.html
{% include "head.html" %}
给head.html传递a = 1这个参数过去 在head.html页面可以使用{{ a }}来调用这个值
并且head.html还可以调用所有的传递给index.html的值
{% include "head.html" with a = 1 %}
block extends
base.html和index.html
block挖坑
extends模板的继承
在index.html页面开头部分写
{% extends "base.html" %}
在父类中使用
{% block title %}
这是一个坑
{% endblock %}
如果不填坑就会显示出父类在坑中写的内容"这是一个坑"
在子类中使用
{% block title %}
这是填的
{% endblock %}
当你的子类继承以后并且填坑就会显示出"这是填的"
url 反向解析
作用就是在有的需求中可能需要改变url,这就出现了一个问题,如果你的代码中多处用到了这个url那么你要一个一个的去更改,反向解析就很好的解决了这个问题,在引用url连接的时候我们使用反向解析来调用url连接,避免了修改urls.py中的路由之后无法匹配的问题
我用的是Django2 和Django1 有所不同 path 和 url的不同之处在于 url的匹配是写一个正则表达式 而 path的是写固定的字符串,只要有一个字符不匹配就访问失败
在项目urls.py的urlpatterns处要做修改
urlpatterns=[
path("admin/", admin.site.urls),
path("", include(("App.urls","App") , namespace="app")),
]
然后再应用的path中添加name = "index"
path("",views.index,name="index")
这样以后就直接使用{%url "app:index"%}就相当于调用了views.index
comment
多行注释
{%comment%}
{% endcomment %}
CSRF
csrf 等于是给你的网页加上了安全验证
在你的form表单中加上{% csrf_token %}
<form action="{% url "app:image" %}" method="post">
{% csrf_token %}
</form>
重点此处的{%csrf_token%}相当于是一个不可见的input标签,里面放置的是一串字符 如下所示
这串字符会存放在cookies中,同样你可以在你的views.py 中使用**response.COOKIES.get(“csrftoken”)**查看内容
在你的前端页面也可查看cookie 在js中使用 document.cookie即可查看返回的是一长串字符
在我们使用ajax技术使用post方式提交数据是需要加上这个cookie的内容才能提交成功
前端获取cookie
function getCookie(cookieName) {
var strCookie = document.cookie;
var arrCookie = strCookie.split("; ");
for(var i = 0; i < arrCookie.length; i++){
var arr = arrCookie[i].split("=");
if(cookieName == arr[0]){
return arr[1];
}
}
return "";
}
ajax请求的写法 不知道为什么我的访问不成功
$.ajax({
type: "post",
url: "lala/",
data: {"user":"root","pwd":"123"},
headers:{ "X-CSRFToken":getCookie("csrftoken") },
dataType: "dataType",
success: function (response) {
console.log(response)
},
error:function(response){
console.log(getCookie("csrftoken"))
console.log("访问失败")
}
});
生成图形验证码的方法
def vertiy1(request):
width = 100
height = 50
color = (random.randrange(256),random.randrange(256),random.randrange(256))
image = Image.new("RGB",(width,height),color)
# 画出了一张图片
draw = ImageDraw.Draw(image)
# 添加噪点
for i in range(200):
xy=(random.randrange(100),random.randrange(50))
color = (random.randrange(256), random.randrange(256), random.randrange(256))
draw.point(xy,fill=color)
# 获取到字体 有的字体会用不了,如果没有显示出文字就换个字体
font = ImageFont.truetype("static/font/QingShu.ttf",40)
str1 = "1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM"
for i in range(4):
color = (255, random.randrange(256), random.randrange(256))
draw.text((5+i*20,5),str1[random.randrange(len(str1))],fill=color,font=font)
del draw
#
buff = io.BytesIO()
image.save(buff,"png")
return HttpResponse(buff.getvalue(),"image/png")