使用django的时候,如果我们希望我们编写的view可以被正常访问,就需要配置url。

在django的官方文档中,url()的例子如下:

polls/urls.py

from django.conf.urls import url

from . import views

urlpatterns = [
url(r'^$', views.index, name='index'),
]

mysite/urls.py

from django.conf.urls import include, url
from django.contrib import admin urlpatterns = [
url(r'^polls/', include('polls.urls')),
url(r'^admin/', include(admin.site.urls)),
]

首先给我们展示了,如何将 app 中的 url.py 加入到 project的 url.py中

如上所示,通过使用导入的 include 就可以帮我们做到,

现在我们重点说一下 url() :

url() 函数具有四个参数: regex(必需)、view(必需)、kwargs(可选)、name(可选)

url(regex, view, kwargs=None, name=None)

url()参数:regex

  这里其实是一个正则表达式,对应了URL模式。Django 从第一个正则表达式开始,依次将请求的URL 与 每个正则表达式进行匹配,知道找到匹配的那个位置。需要注意的是,这里的正则表达式不会匹配URL中 POST/GET 的参数和域名。例如:在http://www.epython.cn/myapp/ 请求中,URLconf 查找的是 myapp/ ;在http://www.epython.cn/myapp/?page=3 请求中,URLconf 查找的也是 myapp/ 。

url()参数:view

  当django 找到一个匹配的正则表达式时,就会调用 view参数 指定的 视图函数,并将HttpRequest对象作为第一个参数,从正则表达式中 ”捕获“ 的其他值作为其他参数,传入到该试图函数中。如果正则表达式使用简单的捕获方式,值将作为位置参数传递;如果使用命名的捕获方式,值将作为关键字参数传递。

from django.conf.urls import url
from account import views urlpatterns = [
url(r'^login/', views.login), # 第一个参数是regex , 第二个参数是view
url(r'^logout/', views.logout),
]

url()参数:kwargs

url(r'^login/', views.login, {'summary': True})

对应的视图函数

def login(request, summary):
print(summary)
return HttpResponse("Login Func.")

url()参数:name

  name用来命名你的URL,这样你就可以在django的其他地方,尤其是模板中,通过名称来明确的引用这个URL,这个强大的特性可以让你,仅仅修改一个文件就可以改变全局的URL模式。

url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),

  name 可以简单的理解为给前面的regex参数起了一个别名,在regex 改变后,我们不用修改 Template 、views 或 model中的代码。

  来看一个简单的例子:

#  url.py
url(r'^plus/(\d+)/(\d+)/$', views.plus, name='plus'), # index.html
<a href="/plus/12/24/">计算 12+24</a>

现在如果我们需要计算的话只需要访问 /plus/12/24/ 就可以了。

有一天我们需要改变一下url 将  /plus/12/24/ 修改成  /12_plus_24/, 这样就会导致我们修改改了url.py之后,对应的Template、views 或 model中对应的地址也需要修改,需要修改的地方越多,我们付出的代价也就越大。

而使用通过 name 参数,我们就可以解决这个问题。

url.py
url(r'^/(\d+)_plus_(\d+)/$', views.plus, name='plus'), index.html
<a href="{% url 'plus' 12 24 %}">计算 12+24</a>

注意: 从第一种方式 变成第二种方式,name 不能修改。

URL中的namespace

在真实的django项目中, 可能会有多个app(五个、十个、或者更多);这个时候需要区分URL中的app的名字。例如,polls 应用具有一个detail 视图,相同项目中的博客应用可能也有这样一个视图。当使用模板标签{% url %}时,人们该如何做才能使得Django知道为一个URL创建哪个应用的视图?

这个时候就需要用到URLconf中的 namespace 。

#  mysite/urls.py
from django.conf.urls import include, url
from django.contrib import admin urlpatterns = [
url(r'^polls/', include('polls.urls', namespace="polls")),
url(r'^admin/', include(admin.site.urls)),
]

最初的index.html

#  polls/templates/polls/index.html
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>

修改后的index.html

#  polls/templates/polls/index.html
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>

Django中url()的更多相关文章

  1. Django中url匹配规则的补充

    Django中url匹配规则是在urls.py文件中配置的. 1.关于正则匹配优先级 在url匹配列表中,如果第一条和第二条同时满足匹配规则,则优先匹配第一条. 在url匹配列表中,如果第一条为正则模 ...

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

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

  3. django中url 和 path 的区别

    django中 url 和 path 都是配置路径,有什么不同? django.urls path django.conf.urls  url path 与 url 是两个不同的模块,效果都是响应返回 ...

  4. django 中url与path小记

    1. 在django 2.0中增加了一些新的特性 更简单的URL路由语法 (Simplified URL routing syntax) admin应用的针对移动设备的优化改进(Mobile-frie ...

  5. Django——URL详解/Django中URL是如何与urls文件匹配的

    URL标准语法 protocol://hostname[:port]/path/[:parameters][?query]#fragment https://i.cnblogs.com/EditPos ...

  6. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

  7. Django中url使用命名空间的错误

    出的错误: 1. Reverse for 'llist' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) ...

  8. Django中URL有关

    django 模板中url的处理   在模板中直接添加‘/home’这样的链接是十分不推荐的,因为这是一个相对的链接,在不同网页中打开可能会返回不一样的结果. 所以推荐的是 1 <a href= ...

  9. django中url,静态文件,POST请求的配置 分类: Python 2015-06-01 17:00 789人阅读 评论(0) 收藏

    平时使用的是pycharm,所以这篇文章主要也是使用pycharm默认创建的django项目为基础进行讲解.项目目录如下图: 1.URL的配置 当创建好项目后,运行项目就可以看到django默认的页面 ...

  10. Django中url的反向查询

    明确几个概念: application namespace:   正在部署的app的名称,一个app的多个实例应该具有相同的application namespace.   可以通过在URLconf模 ...

随机推荐

  1. Scrum团队 《构建之法》第6~7章

    Scrum团队成立 团队名称: 22# 团队目标:做好每次布置的任务 还有提升自己 团队口号:做好现在,展望未来 团队成员:陈楷淇,张裕发,陈泽展,彭一建 角色分配 产品负责人(决定开发内容和优先级排 ...

  2. 视频剪辑软件-PR (Adobe Premiere)

    1.PR 是什么? Adobe Premiere 是一款常用的视频编辑软件,由Adobe公司推出.PR是一款编辑画面质量较好的软件,有较好的兼容性,且可以与Adobe公司推出的其他软件相互协作.目前这 ...

  3. mysql 随机获取一条或多条数据

    若要在i ≤r≤ j 这个范围得到一个随机整数r ,需要用到表达式 FLOOR( RAND() * (j – i)+i),RLOOR()取整树部分,RAND()生成0~1的随机数.ROUND(x,n) ...

  4. sublime 对vue的高亮显示

    前提概要: sublime的下载地址:http://www.sublimetext.com/ notepad++下载地址:https://notepad-plus-plus.org/ .vue的文件在 ...

  5. matlab中 assert(any(mask(:)));

    首先,matlab中any函数:检测矩阵mask中是否有非零元素,如果有,返回1,:如果没有非零元素,即所有元素都是0,那么则返回0. assert()是一个调试程序时经常使用的宏,在程序运行时它计算 ...

  6. 对HashMap的理解(二):高并发下的HashMap

    在分析hashmap高并发场景之前,我们要先搞清楚ReHash这个概念.ReHash是HashMap在扩容时的一个步骤.HashMap的容量是有限的.当经过多次元素插入,使得HashMap达到一定饱和 ...

  7. 函数防抖与函数节流 封装好的debounce和throttle函数

    /** * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 wait,func 才会执行 * * @param {function} func 传入函数,最后一个参数是额外增加的this对象,. ...

  8. JVM中各种变量保存位置

    Java中变量分为静态变量,实例变量,临时变量.那么各种变量具体保存在JVM中的何处呢? 1 静态变量:位于方法区. 2 实例变量:作为对象的一部分,保存在堆中. 3 临时变量:保存于栈中,栈随线程的 ...

  9. 【比赛】NOIP2017 时间复杂度

    恶心的模拟题,考场上犯了一堆错误,多组数据清空没清完.数组开小...民间都是50分,结果CCF90.. 考完后随便改改就过了,还好只少了10分,如果真的是50,我估计会疯掉. 因为考场的时候没写好,所 ...

  10. WEB入门.九 导航菜单

    学习内容 水平导航菜单 垂直导航菜单 下拉式导航菜单 能力目标 制作tab标签导航菜单 制作带箭头的导航菜单 制作带信息提示的导航菜单 制作垂直下拉导航菜单 制作水平下拉导航菜单 本章简介 上一章节中 ...