0x00 URL反向解析和三种不同的反向解析方式

Django中提供了关于URL的映射的解决方案,可以做两个方向的使用:

1.普通解析过程:由客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的视图,获取相应的数据,然后返回给客户端显示。
2.反向解析:通过一个视图的名字,再加上一些参数和值,逆向获取相应的URL。

Django提供了三种不同反向解析处理方式:

1.在模板templates中,使用url标记,如:{% url %}

2.在view中,使用django.core.urlresolvers.reverse()方法

3.在更高一层级的处理url中,用get_absolute_url()方法

如下的URLconf:

from django.conf.urls import patterns, url
urlpatterns = patterns('',
#...
url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
#...
)

0x01 模板中的反向解析

<a href="{% url 'news.views.year_archive' 2012 %}">2012 Archive</a>

# 解释一下:首先,根据视图 'news.views.year_artichive'可以定位到指定的URLconf中,然后后面的2012来填充articles/\d{4}
# 最终的结果为<a href="articles/2012/">2012 Archive</a>

0x02 视图中的重定向

from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def redirect_to_year(request):
# ...
year = 2006
# ...
return HttpResponseRedirect(reverse('news.views.year_archive', args=(year,))) # 解释一下:首先,必须引入django.core.urlresolvers.reverse()方法,然后原理是根据提供的视图和参数的值来逆向查找URLconf,匹配相应的url然后把值拿回来,
# 最后,reverse()返回的值为:articles/2006/,这样就逆向的查出了需要的url

Django学习笔记之Django的url反向解析的更多相关文章

  1. Django学习笔记之Django中间件

    准备 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰 ...

  2. Django学习笔记之Django视图View

    一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...

  3. Django学习笔记之Django Form表单

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  4. python之Django学习笔记(三)---URL调度/URL路由

    在django中,用户发起url请求消息首先到工程的urls.py中查找是否有匹配的url路径 刚创建好的工程中urls.py只有下面几行代码: from django.contrib import ...

  5. Django学习笔记(二)URL编写规则

    先在根目录以及每个app内添加一个空白的urls.py(此处根目录指项目同名文件夹内).程序收到用户请求时,先在根目录的urls.py查找该URL属于哪个app,再从app的urls.py找到具体的U ...

  6. Django学习笔记之Django Form表单详解

    知识预览 构建一个表单 在Django 中构建一个表单 Django Form 类详解 使用表单模板 回到顶部 构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的 ...

  7. Django学习笔记之Django ORM Aggregation聚合详解

    在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序.Djngo聚合就能满足这些要求. 以下面的Mode ...

  8. Django学习笔记之Django QuerySet的方法

    一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get.filter.exclude.delete神马的感觉就已经无所不能了,但随着项目但业 ...

  9. Django学习笔记之Django ORM相关操作

    一般操作 详细请参考官方文档 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> ...

随机推荐

  1. [Go语言]从Docker源码学习Go——Interfaces

    Interface定义: type Namer interface { Method1(param_list) return_type Method2(param_list) return_type ...

  2. zookeeper报错Will not attempt to authenticate using SASL (unknown error)

    Will not attempt to authenticate using SASL (unknown error) 转自:http://blog.csdn.net/mo_xingwang/arti ...

  3. Maven的使用入门

    0.什么是maven? 它是一个软件开发管理工具,主要管理工作是:依赖管理,项目一键构建 1.我们为什么要使用maven? 使用maven构建的项目不包含jar包文件,所以整个项目的体积非常小 mav ...

  4. oracle常用操作命令总结

    一. 默认安装带来的用户名/密码:--sys/change_on_install SYSDBA 或 SYSOPER 不能以 NORMAL 登录,可作为默认的系统管理员 --system/安装时输入的密 ...

  5. Javaweb Tomcat 项目部署方式

    一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中     Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP ...

  6. java项目规范

    一.命名规范 1. 项目名全部小写 2. 包名全部小写 3. 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写. 如:public class MyFirstClass{} 4. 变量 ...

  7. java讲讲几种常见的排序算法

    java讲讲几种常见的排序算法(一) 目录 java讲讲几种常见的排序算法(一) java讲讲几种常见的排序算法(二) 以数组array={6,3,20,8,15,1}为例 冒泡排序 思路:从第0个到 ...

  8. Every write operation executed on a document, deletes included

    Delete API | Elasticsearch Reference [6.5] | Elastic https://www.elastic.co/guide/en/elasticsearch/r ...

  9. Python3量化技术常用插件

    1. 确定自己的系统为64位版本 2. 下载安装Python3 64位版本 如果要使用zipline,建议使用python3.5.另外发现很多东西要求的也是3.5. 主页地址: https://www ...

  10. jquery的常用知识点

    一.用jquery寻找元素 1.选择器 基本选择器: $("*") $("#id") 用id匹配 $(".class") 用class名匹配 ...