1. URL

URL地址说明:
使用url给视图函数传参数
在url配置中将正则部分小括号括起来。比如:
    url(r'^time/plus/(\d{1,2})/$', views.hours_ahead)
如果有多个参数则用/隔开,参数需要用分组,比如:
    url(r'^time/plus/(\d{1,2})/(\d{1,2})/$', views.hours_ahead),
给参数命名,使用正则分组的别名,比如:
    url(r'^time/plus/(?P<time1>\d{1,2})/(?P<time2>\d{1,2})/$', views.hours_ahead)
使用分组别名之后,视图函数的参数必须用分组的别名,但是位置可以不固定。
给url取别名,那么在使用此url的地方可以使用别名。比如:
    url(r'^buy/$', views.buy, name='buy'),
    url(r'^login/$', views.login, name='login'),
 

2. 反向解析

在视图函数中,反向解析url:
    from django.shortcuts import render, redirect
    from django.urls import reverse
    def buy(request):
        return redirect(reverse('index'))
        return redirect(reverse('detail', args=[2]))
        return redirect(reverse('detail', kwargs={"id": 2}))

在templates中,使用别名:
    {% url 'detail' stu.id %}
使用命名空间:
    在工程的urls.py文件中,在include时,可以指定命名空间,更加细化的划分url。比如: 
        url(r'^App/', include('App.urls', namespace='App')),
    指定命令空间后,使用反向解析时需要加上命名空间,比如:
        在视图函数中: return redirect(reverse('students:index'))
        在templates中: {% url 'students:detail' %}
 

3. 模板

在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具
模板的设计方式实现了我们MVT中VT的解耦,VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用
模板处理分为两个过程
    加载
    渲染
模板主要有两个部分
    HTML静态代码
    模板语言,动态插入的代码段(挖坑,填坑)
模板中的动态代码段除了做基本的静态填充,还可以实现一些基本的运算,转换和逻辑
模板中的变量: 视图传递给模板的数据,遵守标识符规则
    语法: {{  var }}
    如果变量不存在,则插入空字符串
    
    python manage.py shell: 进入Python环境, 且会自动导入Django配置,建议使用
 
    >>> python manage.py shell   # 进入python环境
    >>> from django import template
    >>> t = template.Template('My name is {{ name }}.')
    >>> c = template.Context({'name': 'Nige'})
    >>> print (t.render(c))
    My name is Nige.
    >>> c = template.Context({'name': 'Barry'})
    >>> print (t.render(c))
    My name is Barry.

模板中的点语法
字典查询
    >>> from django.template import Template, Context
    >>> person = {'name': 'Sally', 'age': '43'}
    >>> t = Template('{{ person.name }} is {{ person.age }} years old.')
    >>> c = Context({'person': person})
    >>> t.render(c)
    'Sally is 43 years old.'
    
属性或者方法
    >>> from django.template import Template, Context
    >>> import datetime
    >>> d = datetime.date(2017, 5, 2)
    >>> d.year
    2017
    >>> d.month
    5
    >>> d.day
    2
    >>> t = Template('The month is {{ date.month }} and the year is {{ date.year }}.')
    >>> c = Context({'date': d})
    >>> t.render(c)
    'The month is 5 and the year is 2017.'

    >>> from django.template import Template, Context
    >>> class Person(object):
    ...     def __init__(self, first_name, last_name):
    ...         self.first_name, self.last_name = first_name, last_name
    >>> t = Template('Hello, {{ person.first_name }} {{ person.last_name }}.')
    >>> c = Context({'person': Person('John', 'Smith')})
    >>> t.render(c)
    'Hello, John Smith.'

方法不能有参数。
    >>> from django.template import Template, Context
    >>> t = Template('{{ var }} -- {{ var.upper }} -- {{ var.isdigit }}')
    >>> t.render(Context({'var': 'hello'}))
    'hello -- HELLO -- False'
    >>> t.render(Context({'var': '123'}))
    '123 -- 123 -- True'

列表,使用索引,不允许负索引
    >>> from django.template import Template, Context
    >>> t = Template('Item 2 is {{ items.2 }}.')
    >>> c = Context({'items': ['apples', 'bananas', 'carrots']})
    >>> t.render(c)
    'Item 2 is carrots.'

模板中的小弊端,调用对象的方法,不能传递参数
模板中的标签
语法 {%  tag  %}
作用
    1. 加载外部传入的变量  
    2. 在输出中创建文本
    3. 控制循环或逻辑
if 语句:
    格式:
    if单分支
        {% if  表达式 %}
            语句
        {% endif  %}
    if双分支
        {%  if 表达式 %}
            语句
        {% else  %}
            语句
        {% endif %}
    if多分支
        {% if 表达式 %}
            语句
        {% elif 表达式 %}
            语句
        {% else  %}
            语句
        {% endif %}

    判断true或false
        {% if today_is_weekend %}
            <p>Welcome to the weekend!</p> 
        {% endif %}
    使用 and or not,可结合使用,and和or中 and具有更高优先权。
        {% if athlete_list and coach_list %}
            <p>Both athletes and coaches are available.</p>
        {% endif %}

        {% if not athlete_list %}
            <p>There are no athletes.</p>
        {% endif %}

        {% if athlete_list or coach_list %}
            <p>There are some athletes or some coaches.</p>
        {% endif %}

        {% if not athlete_list or coach_list %}
            <p>There are no athletes or there are some coaches.</p>
        {% endif %}
        {% if athlete_list and not coach_list %}
            <p>There are some athletes and absolutely no coaches.</p>
        {% endif %}

    使用多个相同的逻辑操作关键字也是允许的,比如:
        {% if athlete_list or coach_list or parent_list or teacher_list %}
    使用 in和not in,
        {% if "bc" in "abcdef" %}
            This appears since "bc" is a substring of "abcdef"
        {% endif %}
        {% if user not in users %}
            If users is a list, this will appear if user isn't an element of the list.
        {% endif %}
    使用 is 和 is not
        {% if somevar is True %}
            This appears if and only if somevar is True.
        {% endif %}
        {% if somevar is not None %}
            This appears if somevar isn't None.
        {% endif %}
 
 
for 语句:
    {% for 变量 in 列表 %}
        语句1 
    {% empty %}
        语句2
    {% endfor %}
    当列表为空或不存在时,执行empty之后的语句

    {{ forloop.counter }} 表示当前是第几次循环,从1数数
    {% for item in todo_list %}
        <p>{{ forloop.counter }}: {{ item }}</p>
    {%endfor %}

    {{ forloop.counter0}}表示当前是第几次循环,从0数数
    {{ forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停
    {{ forloop.revcounter0}}表示当前第几次循环,倒着数,到0停
    {{ forloop.first }} 是否是第一个  布尔值
    {% for object in objects %}
        {% if forloop.first %}
            <li class="first">
        {% else %}
            <li>
        {% endif %}
        {{ object }}</li>
    {% endfor %}

    {{ forloop.last }} 是否是最后一个 布尔值
    {% for link in links %}
        {{ link }}{% if not forloop.last %} | {% endif %}
    {% endfor %}

    forloop.parentloop
    {% for country in countries %}
      <table>
          {% for city in country.city_list %}
          <tr>
              <td>Country #{{ forloop.parentloop.counter }}</td>
              <td>City #{{ forloop.counter }}</td>
              <td>{{ city }}</td>
          </tr>
          {% endfor %}
      </table>
     {% endfor %}

注释:
    单行注释
    {#  被注释掉的内容  #}
    多行注释
    {% comment %}
        内容
    {% endcomment %}

过滤器: 
    {{ var|过滤器 }}
    作用:在变量显示前修改

    add {{ value|add:2 }}
    没有减法过滤器,但是加法里可以加负数
        {{ value|add:-2 }}
    lower 
        {{ name|lower }}
    upper
        {{ my_list|first|upper }}
    截断:
        {{ bio|truncatechars:30 }}
    过滤器可以传递参数,参数需要使用引号引起来
    比如join: {{ students|join:'=' }}

    默认值:default,格式 {{var|default:value}}
    如果变量没有被提供或者为False,空,会使用默认值
    根据指定格式转换日期为字符串,处理时间的
    就是针对date进行的转换
        {{  dateVal | date:'y-m-d' }}

HTML转义
    将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
    渲染成html:{{ code|safe }}
    关闭自动转义
    {% autoescape off%}
        code
    {% endautoescape %}
    打开自动转义转义
    {% autoescape on%}
        code
    {% endautoescape %}

模板继承
    block:挖坑
        {% block XXX%}
            code
        {% endblock %}
    extends 继承,写在开头位置
        {% extends '父模板路径' %}
    include: 加载模板进行渲染
         {% include '模板文件' %}
    
 

Django (二) url 和 模板的更多相关文章

  1. python django基础二URL路由系统

    URL配置 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数 ...

  2. 3/19 Django框架 url路由配置及模板渲染

    3/19 Django框架 url路由配置及模板渲染 1.路由分配 URL(Uniform Resoure Locato):统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示, ...

  3. django重点url,视图函数,模板语言

    django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...

  4. Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块

    Python第十三天   django 1.6   导入模板   定义数据模型   访问数据库   GET和POST方法    SimpleCMDB项目   urllib模块   urllib2模块 ...

  5. django中url路由配置及渲染方式

    今天我们学习如何配置url.如何传参.如何命名.以及渲染的方式,内容大致有以下几个方面. 创建视图函数并访问 创建app django中url规则 捕获参数 路径转换器 正则表达式 额外参数 渲染方式 ...

  6. Django的URL路由系统

    一. URL配置 URL配置就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图之间的映射表.你就是以这种方式告诉Django,对于哪个URL调用的这段代码. 基本格式 from ...

  7. Django之URL路由系统

    一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这 ...

  8. Django之URL控制器(路由层)

    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), 一.视图层路由配置系统 URL配置(URLconf)就像Django ...

  9. Django 02 url路由配置及渲染方式

    Django 02 url路由配置及渲染方式 一.URL #URL #(Uniform Resoure Locator) 统一资源定位符:对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是 ...

随机推荐

  1. zsh 的简单介绍

    什么是 zsh,要想解释好这个问题,那么得先说明什么是 shell.不负责任的解释说法就是 shell 就是一个壳.这个壳可不是蜗牛的壳,而是计算机的一个壳,当然也不是计算机的外壳啦,这个壳是相对于计 ...

  2. linux内核container_of宏定义分析

    看见一个哥们分析container_of很好,转来留给自己看 一.#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMB ...

  3. 快速上手Ubuntu之安装篇——安装win7,Ubuntu16.04双系统【转】

    本文转载自:http://blog.csdn.net/qq_28205153/article/details/52203512 Linux可以说是开发者的系统,对于开发者来说,Linux发行版不仅为我 ...

  4. 在ubuntu16.04上编译android源码【转】

    本文转载自:http://blog.csdn.net/fuchaosz/article/details/51487585 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

  5. jquery特效(3)—轮播图①(手动点击轮播)

    写了一个轮播图练练手,先写了一个手动点击轮播的轮播图,随后我会慢慢接着深入写自动轮播图和鼠标悬浮图片停止移动轮播图等,虽然今天我生日,但是代码还是得写的,不能找借口放松自己,原地踏步也算后退. 下面来 ...

  6. LightOJ1213 Fantasy of a Summation —— 快速幂

    题目链接:https://vjudge.net/problem/LightOJ-1213 1213 - Fantasy of a Summation    PDF (English) Statisti ...

  7. MYSQL进阶学习笔记十四:MySQL 应用程序优化!(视频序号:进阶_32)

    知识点十五:MySQL 的应用程序优化(32) 一.访问数据库采用连接池 把连接当做对象或设备,统一放在‘连接池’里.凡是需要访问数据库的地方都从连接池里取连接 二.采用缓存减少对于MySQL的访问: ...

  8. html5--3.13 表单的新增属性

    html5--3.13 表单的新增属性 学习要点 掌握表单新增属性的使用 HTML5新增表单属性 之前课程中已经接触过的新增属性:autocomplete属性/autofocus属性/list属性/m ...

  9. yii中调取字段名称时label与labelEx的区别

    $form = $this->beginWidget('CActiveForm',array('id' => 'userRegisterForm')); echo $form->la ...

  10. fhq-treap简介

    \(fhq-treap\)是个好东西啊!无旋转\(treap\)果然是好写,而且还是比较好理解的. 这种数据结构是由神犇fhq发明的.\(Think\ functional!\) fhq神犇说,函数式 ...