zoukankan      html  css  js  c++  java
  • Django学习之模板标签和变量

    safe过滤器和{% autoescape %}标签

    首先看这样一个例子:

    views.py中:

    c = '<h3>更上一层楼</h3>'

    render(request,'test.html',{'content': c})

    然后再html中使用变量{{ content }}

    上述例子就涉及到了过滤器safe,如果不加safe标记,html字符串是会被自动转义的(即原样输出);禁止自动转义之后,按html格式输出变量内容。

    而如果使用到{% autoescape %}标签:

    参数为off,禁止自动转义;

    参数为on,开启自动转义。

    拓展:参数为off,但是加了escape过滤器,结果是开启自动转义。

    block标签

    {% block foo %}

    这个标签中的内容将会被子模板中的覆盖。

    comment标签

    此标签中的内容不会被显示,为注释内容

    {% comment %}
    {{ content }}
    <h2>注释内容</h2>
    {% endcomment %}

    上述内容不会在html中显示。

    注:该标签不能被嵌套使用。

    csrf_token标签

    此标签用来实现CSRF保护。

    cycle标签

    用来进行循环的标签,但是只能循环3次。

    {% cycle 'a' 'b' 'c' 'd' 'e' %}

    前端渲染结果为:

    也可以用模板变量代替字符串,或者2者混用。

    cycle后面至少要有2项目,不然会报“模板语法”错误。

    也可以使用别名:

    {% cycle 'a' 'b' 'c' 'd' 'e' as kk %}
      {{ kk }}

    但是,效果却不是我们预期的那样:

    想要我们预期的效果,标签最后加个silent参数:

    {% cycle 'a' 'b' 'c' 'd' 'e' as kk silent %}
      {{ kk }}

    另外,如果想每次循环都重头开始(即3次都循环一个元素),使用{% resetcycle %}:

    {% cycle 'a' 'b' 'c' 'd' 'e' as kk silent %}
      {{ kk }}
    {% resetcycle %}

    debug标签

    输出debug信息。不过注意,最好把该标签包含在<pre>元素中(对文本进行预格式化,pre用来显示格式化的内容),这样才能以友好的形式显示。

    extends标签

    用来拓展模板的。表明本模板的父模板。

    {% extends "./base2.html" %}
    {% extends "../base1.html" %}
    {% extends "./my/base3.html" %}

    从1.10开始可以写成相对路径。

    filter标签

    用来过滤。

    {% filter force_escape|lower %}
        This text will be HTML-escaped, and will appear in all lowercase.
    {% endfilter %}

    firstof标签

    相当于if...else...

    {% firstof var1 var2 var3 %}

    等效于:

    {% if var1 %}
        {{ var1 }}
    {% elif var2 %}
        {{ var2 }}
    {% elif var3 %}
        {{ var3 }}
    {% endif %}

    也可以设置默认值:

    {% firstof var1 var2 var3 "fallback value" %}

    for标签

    用来循环。

    如果变量对象如下:

    c = [['hello','tom',],]

    可以这样来取子列表的中的元素:

    {% for a,b in content %}
      <h4>{{ a }},{{ b }}</h4>
    {% endfor %}

    显示结果:

    for...empty标签

    条件不成立时,显示的对象。

    <ul>
    {% for athlete in athlete_list %}
        <li>{{ athlete.name }}</li>
    {% empty %}
        <li>Sorry, no athletes in this list.</li>
    {% endfor %}
    </ul>

     

    if标签

    用来做判断的,但是注意and的优先级高于or。

    is用来判断值是否相同。

    {% if somevar is True %}
      This appears if and only if somevar is True.
    {% endif %}

    如果somevar = True则会显示文字,否则不显示内容;不存在的变量,值统一为None,可以依此判断对象是否存在。

    include标签

    用来设置公共模板。很多时候,该标签容易和extends标签弄混淆。但是一个作用是父模板,一个是公共模板。

    {% include './public.html' %}

    load标签

    用来载入模板标签。

    {% load foo bar from somelibrary %}

    from关键字可以实现载入指定的几个模板标签。

    now标签

    用来显示时间。

    It is {% now "jS F Y H:i" %}

    分别表示日,月,年,小时,分钟。后面不加参数会报错!

    可以取别名,使用as参数。

    {% now "Y" as current_year %}
    {% blocktrans %}Copyright {{ current_year }}{% endblocktrans %}

    url标签

    用来表示URL。

    {% url 'app-views-client' client.id %}

    client.id为URL中的参数。

    还可以使用别名:

    {% url 'some-url-name' arg arg2 as the_url %}

    这样变量the_url就可以表示前面的URL。

    static标签

    用来载入静态资源。

    {% load static %}
    <img src="{% static "images/hi.jpg" %}" alt="Hi!" />

    总结:过滤器在此没有怎么讲,是因为我们在函数中能实现更加强大的过滤功能,很多过滤器不怎么用!更为详细的内容可以访问:

    https://docs.djangoproject.com/en/1.11/ref/templates/builtins/

  • 相关阅读:
    Spring Boot 学习(一) 快速搭建SpringBoot 项目
    @RunWith和 SpringJUnit4ClassRunner ---->junit4和Spring一起使用
    Spring Boot的SpringApplication类详解
    @SpringBootApplication的使用
    使用阿里云搭建个人博客
    @Controller和@RestController的区别?
    蚂蚁金服开发文档中心
    Logger.getLogger()和LogFactory.getLog()的区别
    SimpleDateFormat使用详解
    SpringBoot整合RabbitMQ实现微服务间的异步消息沟通
  • 原文地址:https://www.cnblogs.com/leomei91/p/7443066.html
Copyright © 2011-2022 走看看