zoukankan      html  css  js  c++  java
  • Django之模板基础

    Django之模板

    目录

    变量

    过滤器

    标签的使用

     

    变量

    变量的引用格式

    使用双括号,两边空格不能省略。

    语法格式:       {{var_name}}
    

      

    Template和Context对象

    context 字典中元素的键值 "Stephane" 对应了Template中的变量 "{{ name }}"。
    

      

    >>> python manange.py shell  (进入该django项目的环境)
    >>> from django.template import Context, Template
    >>> t = Template('My name is {{ name }}.')
    >>> c = Context({'name': 'Stephane'})
    >>> t.render(c)
    'My name is Stephane.'
    
    
    # 同一模板,多个上下文,一旦有了模板对象,你就可以通过它渲染多个context,无论何时我们都可以
    # 像这样使用同一模板源渲染多个context,只进行 一次模板创建然后多次调用render()方法渲染会
    # 更为高效:
    # Low
    for name in ('John', 'Julie', 'Pat'):
        t = Template('Hello, {{ name }}')
        print t.render(Context({'name': name}))
    
    # Good
    t = Template('Hello, {{ name }}')
    for name in ('John', 'Julie', 'Pat'):
        print t.render(Context({'name': name}))

    具体使用

    html代码 

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <h1>Now {{ t }}</h1>
    <h1>Now {{ list.0 }}</h1>
    <h1>Now {{ dict.name }}</h1>
    <h1>Now {{ c.id }}</h1>
    
    </body>
    </html>
    View Code

    urls.py代码

    from django.contrib import admin
    from django.urls import path,re_path
    from blog import  views
    
    
    urlpatterns = [
    path('show_time/',views.show_time),
    ]
    View Code

    view.py代码

    from django.shortcuts import render,HttpResponse,redirect
    import time
    
    class Animal():
        def __init__(self,id,name):
        self.id=id
        self.name=name
            
    
    
    
    变量
    def show_time(req):
        # return HttpResponse('hello')
        # return render(req,"index.html")
        t=time.ctime()
        list=['name','age','sex']
        dict={'name':'lili','age':18,'sex':1}
        c=Amalis(2,'alex')
        return render(req,"index.html",locals())
    View Code

    访问网页结果:

    Now Tue Feb 19 20:14:06 2019
    
    Now name
    
    Now lili
    
    Now 2
    

      

    过滤器

    add          :   给变量加上相应的值
    addslashes   :    给变量中的引号前加上斜线
    capfirst     :    首字母大写
    cut          :   从字符串中移除指定的字符
    date         :   格式化日期字符串
    default      :   如果值是False,就替换成设置的默认值,否则就是用本来的值
    default_if_none:  如果值是None,就替换成设置的默认值,否则就使用本来的值
    
    
    #实例:
    
    #value1="aBcDe"
    {{ value1|upper }}<br>
    
    #value2=5
    {{ value2|add:3 }}<br>
    
    #value3='he  llo wo r ld'
    {{ value3|cut:' ' }}<br>
    
    #import datetime
    #value4=datetime.datetime.now()
    {{ value4|date:'Y-m-d' }}<br>
    
    #value5=[]
    {{ value5|default:'空的' }}<br>
    
    #value6='<a href="#">跳转</a>'
    
    {{ value6 }}
    
    {% autoescape off %}
      {{ value6 }}
    {% endautoescape %}
    
    {{ value6|safe }}<br>
    
    {{ value6|striptags }}
    
    #value7='1234'
    {{ value7|filesizeformat }}<br>
    {{ value7|first }}<br>
    {{ value7|length }}<br>
    {{ value7|slice:":-1" }}<br>
    
    #value8='http://www.baidu.com/?a=1&b=3'
    {{ value8|urlencode }}<br>
        value9='hello I am yuan'
    

      

    标签(tag)的使用

    tag标签的使用格式

    使用大括号和百分比的组合来表示使用tag

    {% tags %}
    

      

     {# #}注释标签

    Django 注释使用 {# #}。

    {# 这是一个注释 #}
    

      

    {% if  %}标签

    {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容。

    {% if num >= 100 and 8 %}
    
        {% if num > 200 %}
            <p>num大于200</p>
        {% else %}
            <p>num大于100小于200</p>
        {% endif %}
    
    {% elif num < 100%}
        <p>num小于100</p>
    
    {% else %}
        <p>num等于100</p>
    
    {% endif %}
    
    
    
    {% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量
    {% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的:
    
    {% if obj1 and obj2 or obj3 %}
    View Code

    {% for %}标签

    {% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容。

    <ul>
    {% for obj in list %}
        <li>{{ obj.name }}</li>
    {% endfor %}
    </ul>
    
    
    #在标签里添加reversed来反序循环列表:
    
        {% for obj in list reversed %}
        ...
        {% endfor %}
    
    #{% for %}标签可以嵌套:
    
        {% for country in countries %}
            <h1>{{ country.name }}</h1>
            <ul>
             {% for city in country.city_list %}
                <li>{{ city }}</li>
             {% endfor %}
            </ul>
        {% endfor %}
    
    
    #系统不支持中断循环,系统也不支持continue语句,{% for %}标签内置了一个forloop模板变量,
    #这个变量含有一些属性可以提供给你一些关于循环的信息
    
    1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1:
    
        {% for item in todo_list %}
            <p>{{ forloop.counter }}: {{ item }}</p>
        {% endfor %}
    2,forloop.counter0 类似于forloop.counter,但它是从0开始计数,第一次循环设为0
    3,forloop.revcounter
    4,forloop.revcounter0
    5,forloop.first当第一次循环时值为True,在特别情况下很有用:
    
        
        {% for object in objects %}   
             {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}   
             {{ object }}   
            </li>  
        {% endfor %}  
        
    # 富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了
    # 如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
    # Django会在for标签的块中覆盖你定义的forloop变量的值
    # 在其他非循环的地方,你的forloop变量仍然可用
    
    
    #{% empty %}
    
    {{li }}
          {%  for i in li %}
              <li>{{ forloop.counter0 }}----{{ i }}</li>
          {% empty %}
              <li>this is empty!</li>
          {% endfor %}
    
    #         [11, 22, 33, 44, 55]
    #            0----11
    #            1----22
    #            2----33
    #            3----44
    #            4----55
    View Code

    {% csrf_token %}

     用于生成csrf_token的标签,用于防治跨站攻击验证。注意如果你在view的index里用的是render_to_response方法,不会生效。

    其实这里是会生成一个input标签,和其他表单标签一起提交给后台的。

    {% with %}

    用更简单的变量名替代复杂的变量名

    {% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
    

      

    {% verbatim %}: 禁止render

    {% verbatim %}
             {{ hello }}
    {% endverbatim %}
    

      

  • 相关阅读:
    linux RCU锁机制分析
    什么是上下文切换
    Linux内核哈希表分析与应用
    linux内核中hlist_head和hlist_node结构解析
    如何使用queue_delayed_work函数
    《Linux内核设计与实现》读书笔记(十)- 内核同步方法
    自旋锁,读写锁和顺序锁的实现原理
    C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
    深入理解linux系统下proc文件系统内容
    以太网最小帧长为什么是64字节
  • 原文地址:https://www.cnblogs.com/-wenli/p/10403391.html
Copyright © 2011-2022 走看看