Django 模版语法

模板语法

http://www.cnblogs.com/haiyan123/p/7725568.html

1.使用 {{ x }} 映射变量

  • 实例化字典,列表后通过 .(点) 来取值
<p>{{ l.4 }}</p>
<p>{{ d.name }}</p>
<p>{{ d.age }}-----》字典也可以根据句点符取值,一个点就搞定了。
然而在前端页面中是看不到你的模板语法的,当你点击审查元素的
时候,你就会发现,偷偷的换过来了</p>
  • 实例化对象,也是通过点来取值
<p>{{ person_dada.name }}</p>
<p>{{ person_egon.age }}</p>
  • 可以调用对象的无参数方法
def dream(self):
    return "你有梦想吗?"

<p>{{ person_dada.dream }}</p>  <!-- .方法的时候,注意当前的dream方法是没有参数的-->
<h4>字典:{{ dic.name.upper }}</h4>
  • 可以重写对象类中的str方法将对象显示为字符串
 def __str__(self):
            return self.name+str(self.age)

2. 使用{% tag %}标签

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

3.自定义filter 和 simple_tag

过滤器: {{ var|filter_name:参数 }} # 参数只能是两个,一个参数是变量var ,一个是参数是后面的那个参数

标签: {% simple_tag 参数1 参数2 … %}

步骤
  1. 在app中创建templatetags模块(模块名只能是templatetags)
  2. 在templatetags里面创建任意 .py 文件,

my_tags.py

from django import template
from django.utils.safestring import mark_safe

register = template.Library() # register名字固定,不可改变

@register.filter   # 过滤器,{{ var|filter_name:参数 }} 参数只能是两个,一个参数是变量var ,一个是参数是后面的那个参数
def multi(x,y):
    return x*y  # 自定义过滤器函数的参数只能两个,可以进行逻辑判断

@register.simple_tag # 标签  {% simple_tag 参数1 参数2 ... %}
def addtags(x,y,z):
    return x+y+z   # 自定义标签无参数限制,不能进行逻辑判断

@register.simple_tag # 标签
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" % (id, arg,)
    return mark_safe(result)

html

引入tags

{% load my_tags %}
<h1>{{num}}</h1>
<h1>{{num|multi:12 }}</h1>
<h1>{{ num|multi:"[22,333,4444]" }}   相当于复制了,把[22,333,4444]乘了num遍</h1>
<h1>{% addtags 2 5 6 %} 参数不限,但不能放在if for语句中 {% addtags num 5 6  %}</h1>

<h1>自定义过滤器函数的参数只能两个,可以进行逻辑判断</h1>
<h3>
    {% if num|multi:5 > 11 %}
        <p>{{num}}乘以5大于11</p>
    {% else %}
        <p>{{num}}乘以5小于或等于11</p>
    {% endif %}
</h3>

自定义过滤器函数的参数只能两个,可以进行逻辑判断

自定义标签无参数限制,不能进行逻辑判断

{% if i|multi:5 > 1000 %}   <!-- 判断i*5>1000 -->
    <p>大于{{ i }}</p>
{% else %}
    <p>大于等于{{ i }}</p>
{% endif %}

4.模板继承

http://www.cnblogs.com/haiyan123/p/7731959.html

使用 extend 继承模板

{% extends "base.html" %}    #必须是在文件的第一行

使用 block 创建盒子(在base.html中)

{% block classinfo %}
    <h2>首页</h2>
    <h2>学生信息</h2>
    <h3>{{ class_id }}</h3>
  {% endblock%}

使用{{ block.super }} 继承base.html中的对应盒子内容

{{ block.super }}

使用 include 包含另一个页面

     {% include "test.html" %}  <!-- 用于包含test.html 页面-->

使用 load staticfiles 引入静态文件,如jquery等

{% load staticfiles %} <!-- 用于引入静态文件如 jquery等 -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值