欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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")
相关标签: Django