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 %}

  

 

posted @ 2019-02-19 21:12  -零  阅读(256)  评论(0编辑  收藏  举报