zoukankan      html  css  js  c++  java
  • Django 模板进阶

    这节主要讲 Django 模板中的循环,条件判断,常用的标签,过滤器的使用

    • 列表,字典,类的实例
    • 循环,迭代显示列表,字典中的内容
    • 条件循环,判断是否有该内容,比如判断是手机访问还是电脑访问
    • 标签:for,if 这样的功能都是标签
    • 过滤器:管道符号后面的功能,比如{{var | length}},求变量长度的 length 就是一个过滤器

    如果需要将一个或多个变量共享给多个网页或所有网页使用,比如在网页上显示来访者 ip ,这个用 Django 上下文渲染器来做

    实例1:显示一个基本的字符串在网页上

    view.py

    # -*- coding: utf-8 -*-
    from django.shortcuts import render
     
     
    def home(request):
        string = u"我在自强学堂学习Django,用它来建网站"
        return render(request, 'home.html', {'string': string})
    

    在视图中我们传递了一个字符串名称是 string 到模板 home.html

    home.html

    # 在模板中使用
    {{ string }}
    

    实例2:讲解基本的 for 循环和 list 内容显示

    views.py

    def home(request):
        Tutorialist = ["HTML","CSS","jQuery","Python","Django"]
        return render(requset,'home.html',{'Tutorialist':Tutorialist})
    

    在视图中我们传递了一个 List 到模板 home.html

    home.html

    {%  for i in Tutorialist %}
    {{ i }}
    {% endfor %}
    

    for 循环需要一个结束标记

    简单总结一下,一般的变量之类的用 {{}},功能类的,比如循环,条件判断使用 {% %}

    实例3:显示字典中内容

    views.py

    def home(request):
        info_dict = {'site':u'元素1','content':'元素2'}
        return render(request,'home.html',{'info_dict':info_dict})
    

    home.html

    {{ info_dict.site }}
    {{ info_dict.content }}
    

    在模板中取字典的键是 info_site.site 而不是 Python 中的 info_dict['site']

    还可以遍历字典

    {% for key,value in info_dict.items %}
        {{ key }}:{{ value }}
    {% endfor %}
    

    实例4:在模板进行条件判断和 for 循环的详细操作

    view.py

    def home(request):
        List = map(str,range(100)) # 一个长度为 100 的list
        return render(request,'home.html',{'List':List})
    

    假如想用逗号把这些元素连接起来

    home.html

    {% for item in List %}
      {{ item }},
    {% endfor %}
    

    会发现在最后一个元素的后面也有一个逗号

    forloop.last 这个变量,如果是最后一项则为真,否则为假

    {% for item in List %}
      {{ item }}{% if not forloop.last %},{% endif %}
    {% endfor %}
    

    for 循环中还有很多有用的东西

    变量 描述
    forloop.conuter 索引从 1 开始计算
    forloop.counter0 索引从 0 开始计算
    forloop.revconter 索引从最大长度到 1
    forloop.revconter0 索引从最大长度到 0
    forloop.first 当遍历的元素的第一项为真
    forloop.last 当遍历的元素为最后一项为真
    forloop.parentloop 用在嵌套的 for 循环中,获取上一层 for 循环的 forloop

    实例5:模板上得到视图对应得网址

    # views.py
    def add(request,a,b):
        c = int(a) + int(b)
        return HttpResponse(str(c))
        
    # urls.py
    urlpatterns = patterns('',
    	url(r'^add/(d+)/(d+)/$,'app.views.add',name='add')
    )
    
    # template html
    {% url 'add' 4 5 %}
    

    实例6:模板中的逻辑操作

    == , != , >= , <= , > , < 这些比较都可以在模板中使用,比如

    {% if var >= 90 %}
    good
    {% elif var >= 80 %}
    all right
    {% else %}
    work hard
    {% endif %}
    

    and,or,not,in,not in 也可以在模板中使用

    # 判断 num 是不是在 0 到 100 之间
    {% if num > 0 and num < 100 %}
    right
    {% else %}
    wrong
    {% endif %}
    
    # 判断元素是不是在列表里
    {% if a in list %}
    right
    {% endif %}
    

    实例7:模板中获取当前网址,当前用户等

    修改 setting.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    ...
                    'django.template.context_processors.request',
                    ...
                ],
            },
        },
    ]
    

    然后就可以在模板中使用 request 了

    # 获取当前用户
    {{ request.user }}
    
    # 如果登陆就显示内容,不登陆就不显示内容:
    {% if request.user.is_authenticated %}
        {{ request.user.username }},您好!
    {% else %}
        请登陆,这里放登陆链接
    {% endif %}
    
    # 获取当前网址
    {{ request.url }}
    
    # 获取当前 GET 参数
    {{ request.GET.urlencode }}
    
    # 例子
    <a href="{{ request.path }}?{{ request.GET.urlencode }}&delete=1"> 添加delete </a>
    
  • 相关阅读:
    学习 Ext 中一些不错的编码习惯
    actionbar tab字体颜色
    Android Library工程实现模块复用(代码及资源文件)
    Fragment之底部导航栏的实现
    actionbar修改背景颜色
    Android在桌面添加可拖动、点击的悬浮窗口
    请问GridView中 两个图片之间的间距是如何设置的
    http://www.55zm.com/a/20120702/38037.html
    android开源系列:CircleImageView自定义圆形控件的使用
    App版本更新时对SQLite数据库升级或者降级遇到的问题
  • 原文地址:https://www.cnblogs.com/andy-linux/p/6775006.html
Copyright © 2011-2022 走看看