2019.03.24 模板语法变量和块

django模板语言:Django Template Language(DTL)

取值还是稍微有点区别的,字典,列表,都是直接点出来的

都是由vies中传过来的参数   {{ 变量名}}

  • {{...}} :变量标签

  • {% ... %} :块标签

变量标签

  1. 主要用于取值

# 访问字典值

render(request,'list.html',{'user':{'name':'张三','age':10}})
姓名:{{ user.name }},年龄:{{ user.age }}

# 访问对象属性

render(request,'list.html',{'today':datetime.datetime.today()})
{{ today.year }}-{{ today.month }}-{{ today.day }}

# 访问对象的方法(不能有参数)

render(request,'list.html',{'title':'hello world'})

{{ title.upper }}

# 访问列表

render(request,'list.html',{'items':['a1','a2']})

{{items.1}}

配置URL


from django.conf.urls import url
from django.contrib import admin
import views
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'getdata/',views.getdata_view),
]

创建视图



def getdata_view(request):
  user = User('zhangsan','123')


  return render(request,'list.html',{'user':{'pwd':'456'},'obj':user,'title':'helloworld','hlist':['a1','a2']})

创建模板


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <table>
      <tr>
          <td>{{ user.pwd }}</td>
          <td>{{ obj.pwd }}</td>
          <td>{{ title.upper }}</td>
          <td>{{ hlist.1 }}</td>
      </tr>
  </table>

</body>
</html>

 那块级就更好玩了,可以循环的话,那就是说可以根据出生成

出多个标签之类的吧 

块标签{%...%}

for标签

(注:循环序号可以通过{{forloop}}显示)

<h3>循环取值1</h3><hr>
{% for item in person_list %}
  <p>{{ item.name }},{{ item.age }}</p>
{% endfor %}

<h3>循环取值2:倒序</h3><hr>
{% for item in person_list reversed %}
  <!--序号从1开始-->
  <p>{{ forloop.counter }}----->{{ item.name }},{{ item.age }}</p>
  <!--序号从0开始-->
  <p>{{ forloop.counter0 }}----->{{ item.name }},{{ item.age }}</p>
  <!-- 序号倒序 -->
  <p>{{ forloop.revcounter }}----->{{ item.name }},{{ item.age }}</p>
{% endfor %}

<h3>循环取值3:字典</h3><hr>
{% for k,v in d.items %}
  <p>{{ k }},{{ v}}</p>
{% endfor %}


for....empty

for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,进行操作。



{% for person in person_list %}
  <p>{{ person.name }}</p>

{% empty %}
  <p>sorry,no person here</p>
{% endfor %}

if标签

{% if %}支持and or not 条件判断(注意==左右空格)


{% if i > 300 %}
  <p>大于{{ i }}</p>
{% elif i == 200 %}
  <p>等于{{ i }}</p>
{% else %}
  <p>小于{{ i }}</p>
{% endif %}

csrf_token:这个标签用于跨站请求伪造保护


<h3>scrf_token</h3>
<form action="/tag/" method="post">
  {% csrf_token %}
  <p><input type="text" name="haiyan"></p>
  <input type="submit">
</form>

自动转义标签

  • 自动转义:将HTML自动转换成普通字符串输出。不进行标签解析。


< 会转换为&lt;
> 会转换为&gt;
' (单引号) 会转换为&#39;
" (双引号)会转换为 &quot;
& 会转换为 &amp;



def getdata_view(request):

  return render(request,'list.html',{'hello':'<h1>张杰</h1>'})

{% autoescape off %}
  Hello {{ name }}
{% endautoescape %}

注释


单行注释 {#...#}
多行注释 {% comment %}...{% endcomment %}

{% comment %}
  {% for user in users %}
  {% for k,v in user.items %}
 
    {{ forloop.parentloop.counter }} --{{forloop.counter }}--{{ k }}--{{ v }}<br>
   
  {% endfor %}
  {% endfor %}
 
{% endcomment %}

猜你喜欢

转载自www.cnblogs.com/Py-king/p/10587991.html
今日推荐