URL some
**
路由系统:
URL配置(URLconf)就像Django所支撑网站的目录. 本质是URL与该URL要调用的函数的映射表
基本格式 :
from django.conf.urls import url
urlpatterns = [
url(正则表达式,views视图,参数,别名)
]
参数 -- 传给函数视图的默认参数 (字典形式)
别名 -- 一个可选的name参数 若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)
不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^articles 而不是 ^/articles
每个正则表达式前面的'r' 是可选的但是建议加上
是否开启URL访问地址后面不为/跳转至带有/的路径的配置项 APPEND_SLASH=True (\d+) 正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图
(?P < name > pattern),其中name是组的名称,pattern是要匹配的模式 可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图 在实际应用中,使用分组命名匹配的方式可以让你的URLconf 更加明晰且不容易产生参数顺序问题的错误,但是有些开发人员则认为分组命名组语法太丑陋、繁琐 URLconf 匹配的位置 ***
例如
http://www.example.com/myapp/ 请求中,URLconf 将查找 /myapp/
http://www.example.com/myapp/?page=3 请求中,URLconf 仍将查找 /myapp/
URLconf 不检查请求的方式 换言之,所有的请求方法 -- 同一个URL的POST,GET,HEAD,等等,都将路由到相同的函数 捕获的参数永远都是字符串 *** re匹配 match // find all // search
每个在URLconf中捕获的参数都作为一个普通的Python字符串传递给视图,无论正则表达式使用的是什么匹配方式
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
传递到视图函数views.year_archive() 中的year参数永远是一个字符串类型 视图函数指定默认值
# urls.py中
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^blog/$', views.page),
url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
]
# views.py中,可以为num指定默认值
def page(request, num=""):
pass
上面例子上,两个url 模式指向相同的 函数,但是第一个模式并没有从url中捕获任何东西
如果第一个匹配上了,page()函数将使用其默认参数num='1',如果第二个匹配上了,page()
将使用正则表达式捕获到的num值
include 其他的URLconfs --从其他地方导入urls
from django.conf.urls import include, url urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls')), # 可以包含其他的URLconfs文件
]
传递额外的参数给视图函数
URLconfs 具有一个钩子,让你传递一个python 字典作为额外的参数传递给视图函数
django.conf.urls.url() 可以接受一个可选的第三个参数,它是一个字典,表示想要传递给视图函数的额外关键字参数
from django.conf.urls import url
from . import views urlpatterns = [
url(r'^blog/(?P<year>[0-9]{4})/$', views.year_archive, {'foo': 'bar'}),
] 在这个例子中,对于/blog/2005/请求,Django 将调用views.year_archive(request, year='', foo='bar')。
当传递额外参数的字典中的参数和URL中捕获值的命名关键字参数同名时,函数调用时将使用的是字典中的参数,而不是URL中捕获的参数
命名URL和URL反向解析
在使用Django 项目时,一个常见的需求是获得URL的最终形式,以用于嵌入到生成的内容中(视图中和显示给用户的URL等)或者用于处理服务器端的导航(重定向等). -- 反向解析 --
反向解析URL、反向URL 匹配、反向URL 查询或者简单的URL 反查 在需要URL 的地方,对于不同层级,Django 提供不同的工具用于URL 反查:
1 在模板中: 使用url模板标签
2 在python代码中:使用django.core.urlresolvers.reverse() 函数
3 在更高层的与处理Django 模型实例相关的代码中:使用get_absolute_url() 方法 使用 -- 给我们的URL匹配规则起个名字,一个URL模式起一个名字,只需要通过名字调用当前的URL
下面举例:
url(r'^home', views.home, name='home'), # 给我的url匹配模式起名为 home
url(r'^index/(\d*)', views.index, name='index'), # 给我的url匹配模式起名为index 后面再模板中引用: --HTML--
{% url 'home' %} 在views函数中可以这样引用 --py--
from django.urls import reverse
reverse("index", args=("", ))
命名 空间模式
即使不同的APP使用相同的URL名称,URL的命名空间模式也可以让你唯一反转命名的URL
举例
project中的urls.py
from django.conf.urls import url, include urlpatterns = [
url(r'^app01/', include('app01.urls', namespace='app01')),
url(r'^app02/', include('app02.urls', namespace='app02')),
] app01中的urls.py
from django.conf.urls import url
from app01 import views app_name = 'app01'
urlpatterns = [
url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
] app02中的urls.py
from django.conf.urls import url
from app02 import views app_name = 'app02'
urlpatterns = [
url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
] 现在,我的两个app中 url名称重复了,我反转URL的时候就可以通过命名空间的名称得到我当前的URL
下面是语法:
'命名空间名称:URL名称'
模板中使用: -html-
{%url 'app01:detail' pk=12 pp=99 %}
views 中函数使用 -py-
v = reverse('app01:detail',kwargs={'pk':11})
https://www.cnblogs.com/maple-shaw/articles/9282718.html -- 路由--
URL some的更多相关文章
- HTML URL地址解析
通过JavaScript的location对象,可获取URL中的协议.主机名.端口.锚点.查询参数等信息. 示例 URL:http://www.akmsg.com/WebDemo/URLParsing ...
- URL安全的Base64编码
Base64编码可用于在HTTP环境下传递较长的标识信息.在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(包括隐藏表单域)中的形式.此时,采用Base64编码不仅比较简短,同时也具有不可 ...
- Android业务组件化之URL Scheme使用
前言: 最近公司业务发展迅速,单一的项目工程不再适合公司发展需要,所以开始推进公司APP业务组件化,很荣幸自己能够牵头做这件事,经过研究实现组件化的通信方案通过URL Scheme,所以想着现在还是在 ...
- ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
ASP.NET Core的路由是通过一个类型为RouterMiddleware的中间件来实现的.如果我们将最终处理HTTP请求的组件称为HttpHandler,那么RouterMiddleware中间 ...
- Node.js:path、url、querystring模块
Path模块 该模块提供了对文件或目录路径处理的方法,使用require('path')引用. 1.获取文件路径最后部分basename 使用basename(path[,ext])方法来获取路径的最 ...
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
- MVC通过路由实现URL重写
public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.Ro ...
- 【转】java通用URL接口地址调用方式GET和POST方式
java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...
- linux字符串url编码与解码
编码的两种方式 echo '手机' | tr -d '\n' | xxd -plain | sed 's/\(..\)/%\1/g' echo '手机' |tr -d '\n' |od -An -tx ...
- 如何获取url中的参数并传递给iframe中的报表
在使用报表软件时,用户系统左边一般有目录树,点击报表节点就会在右侧网页的iframe中显示出报表,同时点击的时候也会传递一些参数给网页,比如时间和用户信息等.如何使网页中的报表能够获取到传递过来的参数 ...
随机推荐
- web应用1
阅读内容 一.web应用 二.web协议 三.web框架 四.补充知识 回到顶部 一.web应用 二.web协议 三.web框架 四.补充知识 五.补充知识
- mac 安装yarn失败
转载:https://www.jianshu.com/p/d4298239e1e4, yarn 下载一些包的时候总是报错,在控制台执行下面的语句后可以下载,具体原因尚未清楚待研究 git config ...
- Kinect2.0获取数据
最近事情真是多,今天抽空研究一下Kinec2.0的数据获取! 系统要求 https://developer.microsoft.com/en-us/windows/kinect/hardware-se ...
- 万恶之源 - Python模块一
序列化 我们今天学习下序列化,什么是序列化呢? 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 为什么要有序列化模块: 比如,我们在python代码中计算的一个数据需要给另外一段程序使用 ...
- [js]javascript中4种异步
javascript中4种异步: 1.ajax 2.定时器 3.事件绑定 4,回调 定时器 //顺序执行 /* var s = 0; for (var i = 0; i < 10000; i++ ...
- Django-认证系统
一.Django实现cookie与session 一.Django实现的cookie 1.获取cookie request.COOKIES['key'] request.get_signed_cook ...
- map的使用方式之一。
map有返回值 foreach 没得.. 得到结果 可以把里面的值以数组的方式取出来: 举例:
- vue使用md5加密
import crypto from 'crypto' export default { name: 'HelloWorld', data () { return { msg: 'Welcome to ...
- vue滚动事件销毁,填坑
eg:富文本的头部固定,当滚轮大于200时(举例)固定在浏览器头部,距离大于富文本时,头部消失 效果: 在富文本下面加一个空div 这么写: mounted() { $(window).scroll( ...
- MVC 中url-pattern配置为"/"和"/*"的区别
首先大家都知道"/*"可以匹配所有url,包括带扩展名的,一般只用在过滤器上. 而"/"很多人理解成不能拦截带扩展名的,这种理解是错误的!它其实也能拦截“.js ...