Django模板2

接着Django模板1继续写模板相关知识。

if标签

{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )。

但是不允许在同一个标签中同时使用 and 和 or,下边是不合法的:

{% if athlete_list and coach_list or cheerleader_list %}

多次使用同一个逻辑操作符是没有问题的,但是我们不能把不同的操作符组合起来。

{% if athlete_list or coach_list or parent_list or teacher_list %}

系统不支持用圆括号来组合比较操作。如果需要用到圆括号来组合表达你的逻辑式,考虑将它移到模板之外处理,然后以模板变量的形式传入。或者仅仅用嵌套的{% if %}标签替换。

另外,并没有 {% elif %} 标签(注意区分Python语法和Django模板语法), 请使用嵌套的‘{% if %}’ 标签来达成同样的效果。

最后,一定要用 {% endif %} 关闭每一个 {% if %} 标签。

for标签

{% for %}标签允许我们在一个序列上迭代。

给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

给标签增加一个 reversed 使得该列表被反向迭代

{% for athlete in athlete_list reversed %}
...
{% endfor %}

在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。

{% if athlete_list %}
    {% for athlete in athlete_list %}
        <p>{{ athlete.name }}</p>
    {% endfor %}
{% else %}
    <p>There are no athletes. Only computer programmers.</p>
{% endif %}

因为这种做法十分常见,所以`` for`` 标签支持一个可选的`` {% empty %}`` 分句,通过它我们可以定义当列表为空时的输出内容 下面的例子与之前那个等价:

{% for athlete in athlete_list %}
    <p>{{ athlete.name }}</p>
{% empty %}
    <p>There are no athletes. Only computer programmers.</p>
{% endfor %}

Django中for标签不支持退出循环操作,也不支持continue语句。

在每个 {% for %} 循环里有一个称为‘forloop’ 的模板变量。这个变量有一些提示循环进度信息的属性,forloop.counter 总是一个表示当前循环的执行次数的整数计数器。这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。

{% for item in todo_list %}
    <p>{{ forloop.counter }}: {{ item }}</p>
{% endfor %}

forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。

forloop.revcounter 是表示循环中剩余项的整型变量。

forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。

forloop.first 是一个布尔值,如果该迭代是第一次执行,他被置为True

forloop.last 是一个布尔值;在最后一次执行循环时被置为True

{% for link in links %}    {{ link }}    {% if not forloop.last %}         |     {% endif %}{% endfor %}

forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)

ifequal/ifnotequal标签

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}

和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:

{% ifequal section ‘sitenews‘ %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数,其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal %} 中

{# okay below #}
{% ifequal variable 1 %}
{% ifequal variable 1.23 %}
{% ifequal variable ‘foo‘ %}
{% ifequal variable "foo" %}

{# error below #}
{% ifequal variable True %}
{% ifequal variable [1, 2, 3] %}
{% ifequal variable {‘key‘: ‘value‘} %}

如果你需要判断变量是真还是假,请使用 {% if %} 来替代 {% ifequal %} 。

注释标签

单行注释使用 {# #}

{# This is a comment #}

多行注释,可以使用{% comment %}模板标签

{% comment %}
This is a
multi-line comment.
{% endcomment %}

过滤器

过滤器使用管道字符(|)

示例: {{ name|lower }}

过滤管道可以被套接,就是说,一个过滤器管道的输出又可以作为下一个管道的输入,如此下去。 下面的例子实现查找列表的第一个元素并将其转化为大写。

{{ my_list|first|upper }}

有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:

{{ bio|truncatewords:"30" }}

这个将显示变量 bio 的前30个词。

addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是非常有用的。

date : 按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例:

{{ pub_date|date:"F j, Y" }}

length : 返回变量的长度。 对于列表,这个参数将返回列表元素的个数。 对于字符串,这个参数将返回字符串中字符的个数。 你可以对列表或者字符串,或者任何知道怎么测定长度的Python 对象使用这个方法(也就是说,有 __len__() 方法的对象)。

小结

基本copy书上的,自己摘出一部分,东西太多,没有进行测试。接下来的内容会以运行示例来说明。

Django模板2

时间: 2024-10-26 13:34:03

Django模板2的相关文章

Django模板语言小记

1.blog.views.py  # Create your views here. from django.template import loader,Context from django.http import HttpResponse from blog.models import BlogPost def archive(request):     posts = BlogPost.objects.all()     t = loader.get_template('archive.

Django项目实践2 - Django模板(常用语法规则)

http://blog.csdn.net/pipisorry/article/details/45727309 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签及属性]} Django 模板标签 if/else 标签 1. 基本语法格式如下: {% if condition %} ... display {% endif %} 或者: {% if condition1 %} ... display 1 {% elif con

Django -- 模板

一切伟大的行动和思想,都有一个微不足道的开始:   -- 徐志摩<励志天下> 一切能忍受的微不足道,都有一个行动思想在脚下.   -- 小QQ <励志自己> ------------------------------------------------------------------------------------------------------ 前一节,我们把HTML直接硬编码在python中,尽管他便于解释使徒的工作原理,但是却不是一个好主意: 1.对页面设计进行

Django 模板.html中 href参数传入

在Django模板中可能会出现访问多个URL指向同一函数,为减少代码可以利用正则表达式实现 url(r'^remove_userinfo(?P<nid>\d+)/',views.removeuserinfo,name='reinfo'), (?P<nid>\d+)表示此部分的名称为nid,对应removeuserinfo(request,nid)中的nid参数 def removeuserinfo(request,nid): return HttpResponse(nid) 此时

Django 模板中引用静态资源(js,css等)

Django 模板中免不了要用到一些js和CSS文件,查了很多网页,被弄得略晕乎,还是官网靠谱,给个链接大家可以自己看英文的. https://docs.djangoproject.com/en/1.6/howto/static-files/ 大致步骤是这样的: 1.确保setting.py里的installed_apps中包括了django.contrib.staticfiles,没有的话大家给添上就行. 2.同样是在setting.py里面进行添加,我们需要添加静态资源相关的配置.可以这么写

Django模板的使用流程-muahao02目录下测试

在我的云主机上,muahao02的测试: Django模板的使用流程 环境:阿里云主机 步骤: 首先建立blog 这个应用 在blog这个目录下手动建立 templates目录,默认的模板就在这个目录下 vim url.py这个文件 vim views.py这个文件 在一级目录下,执行python manage.py runserver 121.42.138.224:8000 [[email protected] templates]# pwd /root/muahao02/blog/templ

Django模板系统学习整理

block extends include三者的差别跟用法 一.定义基础模板,在html内容中定义多个block块,block由子模板引用同名block块,来决定是否替换这些部分 {% block title %}一些内容,这里可不填{% endblock %} {% block content %}一些内容,这里可不填{% endblock %} {% block footer %}一些内容,这里可不填{% endblock %} 这里 title content footer 不是变量,名字

Django模板1

上一篇中带参数的URLconf虽然可以做到传参动态显示内容,但是最终现实的内容还是硬编码到Python代码中的 1 def hours_ahead(request,phours): 2 try: 3 phours = int(phours) 4 except VauleError: 5 raise Http404() 6 7 dt = datetime.datetime.now() + datetime.timedelta(hours=phours) 8 html = "<html>

转换器2:ThinkPhp模板转Django模板

前天写了个<ThinkPhp模板转Flask模板> 居然被同事鄙视了,原因是他用Django,我用Flask,为了避免被他继续安利Django的强大.我决定写一个Django模板转换器. 为了复用代码,得用继承,我把原代码分成三段,一下子获得了三个转换器. class ConverterTemplateEncoding(object): separators = [('<', '>')] def __init__(self): self.match = {'opening': 0,

Django模板API

基础部分 模板是一个文档或者说一个普通的python字符串由Django模板语言标记而成.一个模板语言可以包括block标签或者是变量. 一个block标签是一个处于模板中的标记,能过完成一些事情. Block的定义看起来有点模糊,这是django开发团队有意为之的.比如一个block标签即可以用来输出内容:也可以被当做一个控制结构(比如if声明或者是for循环)从数据库中抓去数据:或者是通往另一个模板的入口. Block标签由"{%"和"%}"组成. 比如一个模板