使用终端,可以更方便的去实验,但是没有提示信息:

在项目目录下:

D:\MyPython\day23\HelloWorld>python manage.py shell

开始实验:

>>> from django.template import Context,Template
>>> t=Template("hello{{name}}")
>>> c=Context({"name":"lad"})
>>> t.render(c)
结果为
u'hellolad'

其内部实现大概如此。将模板文件读取,和传入的content字典进行渲染,然后使用HttpResponse

将内容返回给用户。

使用HTTPResponse实现:

from django.shortcuts import render,HttpResponse
from django.template.loader import get_template
from django.template import Context,Template
import datetime def cur_time(req):
t=get_template("cur_time.html")
curtime = datetime.datetime.now()
c=Context({'ctime':curtime})
html = t.render(c)
return HttpResponse(html)

模板语言的使用:

1.{{ 变量名 }}

若是函数没有传递该变量,也不会报错,只是认为不存在,为空

可以使用default模板函数:

{{ name|default:"没有" }}

2.对于列表,字典,对象等传参,可以使用万能'  .  '句点号来获取数据

{{ 列表.索引 }}

{{字典.键}}

{{对象.成员变量}}

3.调用模板语言自带函数,使用管道调用函数处理,使用冒号进行传参

{{ name|default:"空的" }}

{{ name|add:}}

{{ name|upper}}

{{ name|lower}}

{{ name|cut:' ' }}将name变量中的空格剔除

{{ val|date:'Y-m-d' }} # import datetime #val=datetime.datetime.now()将数据格式化输出

{{ 列表|first }}#或字典等

{{ 列表|length}}
.....

4.{%  %}

for循环

{% for item in 字典 %}

  {{ forloop.counter0 }}:{{item}}

{% endfor %}

if判断

{% if 条件 %}

  ......
{% elif 条件%}   ......
{% else %}   ...... {% endif %}

csrf令牌使用:(只会出现在表格传递中)

<form action="" method="post">
<input name="name" type="text"/>
<input name="age" type="text"/>
{% csrf_token %}
<input type="submit">
</form>
    <form action="" method="post">
<input name="name" type="text"/>
<input name="age" type="text"/>
<input type='hidden' name='csrfmiddlewaretoken' value='pbBjEfV8sp10gsVZ3ymi5E8Mqbl8PIkf' />
<input type="submit">
</form>

此处注意对于render是可以直接使用csrf_token,成功生成令牌

但是对于render_to_response,需要进行处理context_instance,不然前端不会生成令牌

    return render_to_response("post1.html",locals(),context_instance=RequestContext(request))

补充:ajax post使用令牌:

一种是form中包含令牌数据,我们$("#fm").serialize可以直接序列化数据传递即可

另外一种需要我们自己添加数据时,手动添令牌:简便方法:

            $.ajax({
url:"",
data:{p:val,csrfmiddlewaretoken: '{{ csrf_token }}'},
type:"POST",
dataType:"json",
success:function(data){
alert("")
}
})

autoescape 输出原生代码,不是转义后的代码:

#value6='<a href="#">跳转</a>'

{{ value6 }}

{% autoescape off %}
{{ value6 }}
{% endautoescape %}
#若是不含autoescape,输出的只是字符串,不具有跳转功能,因为为了保证信息安全性,会默认自动将输出数据进行转义

或者使用:

{{ value6|safe }}

而在tornado中则是使用:

{% autoescape None %}
或者
在简单表达语句 {{ … }} 写成 {% raw …%}

url:  {% url "ll" %}其中ll是别名

该函数在使用别名是用到

with:  使用更简单的变量名替换复杂变量名

{% with 简单 = 复杂 %}
{{ 简单 }}
{% with n = name %}
{{ n }}

.....

自定义模板标签(函数):

重点:在APP中目录下创建templatetags目录,放置自定义函数

目录:

blog    APP目录
templatetags 目录存放自定义函数文件
my_func.py  文件
from django import template

register = template.Library()   #register的名字是固定的,不可改变

@register.simple_tag #装饰器
def my_add100(v1):
return v1+

调用:

{% load my_func %}
<h1>{% my_add100 %}</h1>  #输出104

自定义filter(函数):

其他一致,只是改变了装饰器,调用方式也改变

@register.filter
def myadd101(v1,v2):
return v1+v2
<h1>{{ num|myadd101: }}</h1>  #num会作为第一个参数

对于filter只可以插入一个其他参数,simple_tag可以插入多个参数,用空格隔开

但是在条件判断时:filter可以使用,

{% if num|myadd101: ==  %} #num=
<h1>filter ok</h1>  #可以显示
{% endif %}

simple_tag不能,两者各有利弊

注意:在使用自定义模块函数后,需要重启项目

python---django中模板渲染(csrf令牌使用,自定义模板函数)的更多相关文章

  1. Python Django中QQ邮箱授权码问题

    Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...

  2. RSA算法在Python Django中的简单应用

    说明 RSA算法是当今使用最广泛,安全度最高的加密算法. • RSA算法的安全性理论基础 [引]根据百科介绍,对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难, ...

  3. token、cookie和session区别以及django中的cookie,csrf

    参考:https://my.oschina.net/xianggao/blog/395675?fromerr=GC9KVenE [前言]登录时需要post的表单信息. 先跳过具体案例,讲解基础知识: ...

  4. Python Django 中的STATIC_URL 设置和使用解析

    使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...

  5. python Django中的cookie和session

    目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...

  6. django “如何”系列4:如何编写自定义模板标签和过滤器

    django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...

  7. [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)

    一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...

  8. python django中使用sqlite3数据库 存储二进制数据ByteArray

    在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...

  9. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  10. Python Django中一些少用却很实用的orm查询方法

    一.使用Q对象进行限制条件之间 "或" 连接查询 from django.db.models import Q from django.contrib.auth.models im ...

随机推荐

  1. 使用Redis做分布式

    一 为什么使用 Redis 在项目中使用 Redis,主要考虑两个角度:性能和并发.如果只是为了分布式锁这些其他功能,还有其他中间件 Zookpeer 等代替,并非一定要使用 Redis. 性能: 如 ...

  2. SpringBoot日记——编码配置篇

    插入一个小篇章,有人在编写代码的时候,要么控制台乱码,要么页面乱码等等, 我这里有个配置,可以解决各种乱码问题,直接来看. # ==================== 编码配置 ========== ...

  3. Houdini Linux Crack

    安装 破解停止服务 /etc/init.d/sesinetd stop 刪除sesinetd | 拷贝破解文件sesinetd | 修改sesinetd的权限(读写权限) cd /usr/lib/se ...

  4. OpenGL学习(3)——Shader

    之前已经接触过Vertex Shader和Fragment Shader,这次学习如何编写Shader并封装成类. Shader源码主要有四部分: 版本声明 #version xxx core: 使用 ...

  5. PAT甲题题解-1091. Acute Stroke (30)-BFS

    题意:给定三维数组,0表示正常,1表示有肿瘤块,肿瘤块的区域>=t才算是肿瘤,求所有肿瘤块的体积和 这道题一开始就想到了dfs或者bfs,但当时看数据量挺大的,以为会导致栈溢出,所以并没有立刻写 ...

  6. 第一个Sprint计划

    时间:5月22-28日 (6天) 人员:杜殷浩(界面设计) 何广强(界面美化) 目标:将基本框架设计好,实现好.

  7. Python正则表达式使用

    Python正则表达式使用 参考资料: Python正则表达式| 菜鸟教程 Python正则表达式详解 - 我当道士那儿些年 - 博客园 前言 由于遇到一个提取字符串某个子串的问题,刚开始使用了暴力方 ...

  8. MongoDB ,cursor not found异常

    查询mongoDB集合数据更新,数据有400w多.我一次用cursor(游标)取1w,处理更新.程序在某段时间运行中遍历游标时发生异常! DBCursor cursor = tabColl.find( ...

  9. AIX上安装配置DB2

    在2台P550数据库主机上安装DB2 V8.2,两台数据库主机间进行数据库HA配置,实现数据库双机互备. 本文档编写以磁盘大小360G,数据库名CRAMS_JS为例. 设备准备 请系统管理员协助划分D ...

  10. Android 7.0+相机、相册、裁剪适配问题

    Android 7.0+相机.相册.裁剪适配问题 在manifest中: <provider android:name="android.support.v4.content.File ...