Django中过滤器的使用跟其它框架不一样,它比较严谨,所以有好多的地方 都是不相同的
1、定义自定义的过滤器
建立一个跟__pycache__文件同级的文件夹 命名为templatetags, 然后在templatetags中定义过滤器,
#导包
#导入模板模块
from django import template
#注册过滤器对象
register = template.Library()
#定义自定义过滤器
#在django内部,通过装饰器的方式来自定义过滤器
@register.filter
def my_str(val):
return '$' + str(val)
然后就可以在路由里面输出
{# 使用自定义过滤器时导入过滤器文件,默认读取内层的mysite #}
{% load d3_my_filter %}
{{ test_str | my_str }}
2、定义一个双参数的过滤器
#定义一个双参数过滤器
@register.filter
def my_str_two(val,p1):
return val + p1
然后在模板里输出
{# 两个过滤器参数进行调用 :后面的就是第二个参数 #}
{{ '你好' | my_str_two:'不好?' }}
3、定义一个多参数的过滤器
#定义一个多参数的过滤器
#注册过滤器的时候,需要注册simple_tag
@register.simple_tag
def my_str_many(val,p1,p2):
return val + p1 + p2
然后在模板里输出,这儿需要注意,跟上面的两个不一样,参数 _‘你好’ ‘不好’ ‘啊’ _ 是自己传的,不像上面的一样是调用的!!!
{# 调用多参数的过滤器,可以使用 % 来调用 #}
{% my_str_many '你好' '不好' '啊' %}
4、定义一个取余的过滤器
#定义一个取余数的过滤器
@register.filter
def get_line(val):
return int(val) % 2
在模板里输出
{# for 和 if 嵌套 #}
{% for item in test_list %}
{% if forloop.counter|get_line == 0 %}
{% else %}
{% endif %}
{{item}}
{% endfor %}
5、当使用html标签时 使用内置过滤器safe转义
{{ test_b|safe }}
6、也可以通过python语言写前端的页面
#定义视图方法
def index(request):
test_str = '你好这里是首页'
test_list = [1,2,3,4]
test_int = 100
test_b = '你好'
#使用后台来编写table
#定义好表格起始标签
my_table = ""
#在循环内填充表格
for item in test_list:
#定义好一个类选择器
my_class = ""
#判断奇数还是偶数
if item % 2 == 0:
my_class = "tr2"
else:
my_class = "tr1"
#将判断后的类选择器填入字符串
my_table += "%s " % (my_class,str(item))
#补全标签
my_table += "
"
然后在模板里直接调用,
{# 输出后台table #}
{{ my_table|safe }}
注意这里也需要safe转义前端页面的tr td…标签不然就会显示如下
7、 使用locals()方法可以将视图方法内所有的变量默认传参,建立常使用
return render(request,'d3_index.html',locals())
8、Django 的session 需要设置连接mysql数据库
修改配置文件settions.py
'default': {
'ENGINE': 'django.db.backends.mysql', #数据库引擎
'NAME': 'mydjango', #数据库名
'USER': 'root', #用户名
'PASSWORD': '123456', #密码
'HOST': '', #数据库主机,默认为localhost
'PORT': '', #数据库端口,MySQL默认为3306
'OPTIONS': {
'autocommit': True,
}
}
修改 __init__.py 文件
#导包
import pymysql
#初始化
pymysql.install_as_MySQLdb()
django session 的增删取
存储
request.session[‘username’] = ‘123’
删除
del request.session[‘username’]
取值
request.session.get(“username”)