django学习笔记---模板语言继承、转义和simple_tag

转义

django的模板语言转义是:

1. render({'t2': ‘<p>2<p/>’ }) 直接 {{ t2|safe }}就能显示段落
2. render {'t2': '&lt;p&gt;<p>' } 需要手动写一个转换器如下面的trans,先将 &lt;p&gt;转换成<p>然后再safe,才能显示为“段落”  --> {{ t2 |trans | safe }} 

@register.filter
def trans(ele):
    """
    转换 “&lt;p&gt;17&lt;/p&gt;” 为“<p>17<p/>”
    :param ele:
    :return:
    """
    ele = ele.replace("&lt;p&gt;", "").replace("&lt;/p&gt;", "")
    ele = ele.replace("&amp;lt;","<").replace("&amp;gt;",">").replace("&lt;br/&gt;","").replace("&amp;nbsp;"," ")
    ele = ele.replace("&lt;", "<").replace("&gt;", ">").replace("&quot;", "\"").replace("&gt", ">").replace("##$$##","__________")
    # print("ele",ele)
    return ele

 

本次内容记忆

- 自定义函数
simple_tag
a. app下创建templatetags的python目录(一定要在app下,就是和app下的model.py,views.py同级目录)
b. 任意xxoo.py文件
c. 创建template对象 register
d. 
@register.simple_tag
def func(a1,a2,a3....)
return "asdfasd"
e. settings中注册APP
f. 顶部 {% load xxoo %}
g. {% 函数名 arg1 arg2 %}
缺点:
不能作为if条件
优点:
参数任意
filter
a. app下创建templatetags目录(名字不能改
b. 任意xxoo.py文件
c. 创建template对象 register
d. 
@register.filter
def func(a1,a2)
return "asdfasd"
e. settings中注册APP
f. 顶部 {% load xxoo %}
g. {{ 参数1|函数名:"参数二,参数三" }} {{ 参数1|函数名:数字 }}
缺点:
最多两个参数,不能加空格
优点:
能作为if条件

-------------------------------我是分割线---------------------------------------

将共同的写入一个模板文件,可以命名为master.html

<!DOCTYPE html>
<html lang="en">                                                                                                      
<head>
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="/static/commons.css"/>
    <style>
        .pg-header{
            height:50px;
            background-color:blue;
            text-align:center;
            font-size : 30px;
        }
        .menu{
            width:200px;
            background-color: darkgrey;
            position: absolute;
            top:50px;
            left:0;
            bottom:0;
            text-align:center
        }
        .content{
            position: absolute;
            left:200px;
            top:50px;
            right:0px;
            bottom:0px;
            padding-left:50px;
        }
    </style>
    {% block css %}{% endblock %}
</head>
<body>
    <div class="pg-header">欢迎来到测试页面</div>
    <div class="menu"><h2>菜单栏</h2></div>

    <div class="content">
        {% block content %}{% endblock %}
    </div>
    <script src="/static/jquery-1.12.4.js"></script>
    {% block js %}{% endblock %}
</body>
</html>

 

如果有html要套用这个模板(master.html),那么可以这样写,t1.html里面继承的顺序(content,js,css)与最后实现结果没有关系

 

{% extends 'master.html' %}

{% load autodefine %}
{% block title %}t1{% endblock %}

{% block content %}
    <h3>1.下面写入t1的内容</h3>
    <div>这是t1</div>
    <input id='i1' type="button" value="点击"/>
    <h3>2.模板语言include使用</h3>
    {% for i in u %}
        <div>{% include 'tag.html' %}</div>   <!--如果要想要循环写一些功能的话,你可以把要循环的内容放入一个新的html,然后用include就可以 -->
    {% endfor %}
    <h3>3.模板语言自定义函数</h3>
    {add 1 2 3}方式可以传多个参数:    {% add 1 2 3 %}
    <br/>
    { 1|add2:'30,40' }方式最多传2个参数:   {{ 1|add2:"30,40" }}
    <h3>4.末班语言内置函数</h3>
    {{ name|lower }}

{% endblock %}

{% block js %}
    <script>
        $('#i1').on('click',function(){
            alert('t1');
        })
    </script>
{% endblock %}


tag.html <用于include>,可以用循环一次性放多个

 

<input type="text" />

自定义函数,autodefine 

from django import template
from django.utils.safestring import mark_safe
register = template.Library()

@register.simple_tag
def add(a1,a2,a3):
    return a1+a2+a3

@register.filter
def add2(a1,a2):
    print(a2)
    return str(a1) + a2

 

样品示例:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值