栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django之模板

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django之模板

模板分为静态部分和动态部分,其中动态部分主要就是模板语言,下面通过模板变量、标签、过滤器、注释几个方面进行说明。

1.模板变量

    首先打开book/views.py文件,创建一个test_book()视图函数(这里创建一个类进行调用);

class Test_book:
    def __init__(self):
        pass

    def pfunc(self):
        return "hello"

def test_book(request):
    tb = Test_book()
    return render(request,'book/test_book.html',{"tb":tb})

    接着,打开book/urls.py文件并进行url配置;

    url(r"^test_book",test_book),

     然后,在templates/book下创建test_book.html,代码如下:




    
    Title


    {{ tb.pfunc }}


     效果如下:

   

2.标签

     模板中的常见标签有for、if、比较运算符、布尔运算符等,下面简单创建一个应用说明。

     将上述的test_book.html进行修改,代码如下:




    
    Title


    {{ tb.pfunc }}
{{book.0}} - {{book.1}}
{% for book in books %} {% if forloop.counter > 1 %} {% else %} {% endif %} {% endfor %}
编号 书名 价格
{{book.id}} {{book.bname}} {{book.bprice}}

      效果如下:

      

3.过滤器

    先对过滤器进行一个基本使用,继续对test_book.html进行修改;




    
    Title


    {{ tb.pfunc }}
{{book.0}} - {{book.1}}
{% for book in books %} {% if forloop.counter > 1 %} {% else %} {% endif %} {% endfor %}
编号 书名 价格 出版时间
{{book.id}} {{book.bname}} {{book.bprice}} {{book.bpub_date|date:'Y-m-d H:i:s'}}

     效果如下:

     

     若想要使上述表格中的偶数行变灰,奇数行不变,并且过滤一串文字,这里需要用到自定义过       滤器。

     首先在book应用下创建一个templatetags包,在包下创建filters.py文件,代码如下:

from django.template import Library

# 创建Library对象
register = Library()

# 使用装饰器进行处理,定义求余函数filterid(),将num对2求余
@register.filter
def filterid(num):
    return num%2 == 0

@register.filter
def filtertext(temp):
    return "过滤器使用的是 | 来使用"

      接着修改test_book.html中的代码;




    
    Title


    {{ tb.pfunc }}
{% load filters %} {{book.0}} - {{book.1}}
{{ desc|filtertext }} {% for book in books %} {% if forloop.counter|filterid %} {% else %} {% endif %} {% endfor %}
编号 书名 价格 出版时间
{{book.id}} {{book.bname}} {{book.bprice}} {{book.bpub_date|date:'Y-m-d H:i:s'}}

     效果如下: 

     

4.注释

     这里简单说明一下注释。

# 单行注释
{# 注释内容 #}

# 多行注释
{% comment %} 
注释内容 
{% endcomment %}
 5.继承模板

     继承模板主要是为了提高代码重用性或减少代码冗余率,以减少开发人员的工作量。

     首先在templates下创建一个layout.html作为一个父模板;




    
    {% block titleTpl %}
    中大南方
    {% endblock titleTpl %}


    
    
        
  • 首页
  • 产品
  • 关于我们
{% block contentTpl %}

粤2006 中大南方

{% endblock contentTpl %}

     接着在templates/book下创建子模板的tpl_extends.html文件;

{% extends "layout.html" %}

{% block titleTpl %}
中大南方-首页
{% endblock titleTpl %}

{% block contentTpl %}

粤2006 中大南方

  • 联系电话
  • 地址
  • 邮箱
{% endblock contentTpl %}

     然后,在book/views.py文件下,创建一个test_tpl_extends()视图函数,并配置路由;

def test_tpl_extends(request):
    return render(request,'book/tpl_extends.html')
    url(r"^test_tpl_extends",test_tpl_extends),

     效果如下:

    

 6.HTML转义

    转义后的代码不会被直接解释执行,而是直接呈现出来,这是为了防止客户端通过嵌入js代码来      攻击网站。

    创建一个视图函数test_escape()来实现

def test_escape(request):
    con = 'content'
    return render(request,'book/test_escape.html',{'con':con})

    编写templates/book/test_escape.html代码如下:




    
    HTML模板转义


    结果:{{ con }}

禁用转义后的结果:{{con|safe}}

    效果如下:

    

7.CSRF防御

    之前我们为了防止CSRF的攻击,之间在settings.py处注释了CSRF,但这是不安全的,因此我      们通过以下的方法来解决。

    创建一个视图函数test_csrf(),并配置路由url;

def test_csrf(request):
    return render(request,'book/csrf_test.html')
    url(r"^test_csrf",test_csrf),

    接着,编写templates/book/test_csrf.html代码如下:




    
    Title


    
{% csrf_token %} 用户名:
密码:

    通过这样,POST请求的表单便可以正常进行,效果如下:

    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664831.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号