3-1 URL编写规则
# 在每个App中设置独立的静态资源和模板文件并添加一个空白内容的urls.py文件。
# 当程序收到用户请求的时候,首先在根目录的urls.py查找该URL属于哪个APP,然后再从APP的urls.py找到具体的URL信息。 # 在根目录的urls.py编写URL规则,如下所示:
from django.contrib import admin # 导入Admin功能模块
from django.urls import path,include # 导入URL编写模块
# 项目的URL集合,每个元素代表一条URL信息
urlpatterns = [
# admin.site.urls是URL的处理函数,也称为视图函数
path('admin/', admin.site.urls), # Admin站点管理
# URL为空,代表为网站的域名,即127.0.0.1:8000,include将该URL的urls.py处理
path('',include('index.urls')) # 首页地址
] # 由于首页的地址分发给index的urls.py处理,因此下一步需要对index的urls.py编写URL信息
from django.urls import path
from . import views
urlpatterns=[
path('',views.index)
] # 上述代码导入了同一目录下的views.py文件,该文件用于编写视图函数,处理URL请求信息并返回网页内容给用户。
# index函数必须设置参数request,该参数代表当前用户的请求对象,该对象包含用户名,请求内容和请求方式等信息
from django.shortcuts import HttpResponse
def index(request):
return HttpResponse("Hello World") 3-2 带变量的URL
# URL的变量类型由字符类型、整型、slug和uuid,最为常用的是字符类型和整型
# 字符类型:匹配任何非空字符串,但不含斜杠。如果没有指定类型,默认使用该类型
# 匹配0和正整数
# 可理解为注释、后缀或附属等概念
# 匹配一个uuid格式的对象
# 根据上述变量类型,在index的urls里面添加带有字符类型、整型和slug的urls地址信息,代码如下:
from django.urls import path
from . import views
urlpatterns=[
path('',views.index),
# <year>:变量名为year,数据格式为字符类型,与<str:year>的含义一样
path('<year>/<int:month>/<slug:day>',views.mydate)
]
然后在views.py中编写视图函数mydate的处理方法,带么如下:
def mydate(request,year,month,day):
return HttpResponse(str(year)+'/'+str(month)+'/'+str(day))
# 在URL中引入正则表达式,首先导入re_path功能模块,正则表达式的作用是对URL的变量进行截取和判断
from django.urls import path,re_path
urlpatterns=[
# path('<year>/<int:month>/<slug:day>',views.mydate),
# ?P是固定格式,<year>为变量的编写规则,[0-9]{4}代表变量的长度为4,只允许截取0-9的值
# re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})',views.mydate)
] 3-3 设置参数name
# 在urls.py添加新的视图函数
re_path('(?P<year>[0-9]{4})',views.myyear,name='myyear')
#在templates文件夹添加myyear.html文件<body></body>中添加:
<body>
<div><a href="/2018.html">2018 old Archive</a></div>
<div><a href="{% url 'myyear' 2018 %}">2018 Archive</a></div>
</body>
#在view.py添加对应的视图函数:
from django.shortcuts import HttpResponse,render
def myyear(request,year):
return render(request,'myyear.html')
# 上述代码分别从URL、视图函数和HTML模板来说明name的具体作用:
# (1) 当用户访问该URL时,项目根据URL信息选择视图函数myyear处理,并将该URL命名为myyear.
# (2) 视图函数myyear将模板myyear.html作为响应内容生成相应的网页返回给用户.
# (3) 在模板myyear.html中设置两个标签a,虽然两个标签a的href属性值的写法有所不同,但实质上两者都指向命名为myyear的URL信息
# (4) 第二个标签a的href为{% url 'myyear' 2018 %},这是Django的模板写法,模板语法以{%%}表示。
# 其中,url'myyear'是将命名为myyear的URL的地址信息作为href属性值;2018是该URL的变量year,若URL没有设置变量值,则无须添加
# 在URL中设置参数name,只要参数name的值不变,无论URL地址信息如何修改都无须修改模板中标签a的href属性值 3-4 设置额外参数
# 参数为字典的URL
re_path('(?P<year>[0-9]{4})',views.myyear_dict,{'month':''},name='myyear_dict')
# 参数为字典的URL的视图函数
def myyear_dict(request,year,month):
return render(request,'myyear_dict.html',{'month':month})
# 在template文件夹添加myyear_dict.html文件:
<body>
<a href="{% url 'myyear_dict' 2018%}">2018{{ month }} Archive</a>
</body>
# 在编写URL规则时,如果需要设置额外参数,设置规则如下:
# 参数只能以字典的形式表示
# 设置的参数只能视图函数读取和使用
# 字典的一个键值对代表一个参数,键代表参数名,值代表参数值
# 参数值没有数据格式限制,可以为某个对象。字符串或列表(元祖)等

03 编写URL规则的更多相关文章

  1. 《玩转Django2.0》读书笔记-编写URL规则

    <玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...

  2. 玩转Django2.0---Django笔记建站基础三(编写URL规则)

    第三章 编写URL规则 URL(Uniform Resource Locator,统一资源定位符)是对可以从互联网上得到的资源位置和访问方法简洁的表示,是互联网上标准资源的地址. 在App里由于Dja ...

  3. PHPCMS V9静态化HTML生成设置及URL规则优化

    先讲讲Phpcms V9在后台怎么设置生成静态化HTML,之后再讲解怎么自定义URL规则,进行URL地址优化.在这一篇中,伪静态就不涉及了,大家可以移步到Phpcms V9全站伪静态设置方法. 一.静 ...

  4. thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)

    原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...

  5. flask动态url规则

    动态URL规则 URL规则可以添加变量部分,也就是件更符合同规则的URL抽象成一个URL模式. @app.route('/item/<id>') def item(id): return ...

  6. Linux防火墙基础与编写防火墙规则

    Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根 ...

  7. Prometheus 编写告警规则案例

    Prometheus 编写告警规则案例 注:确保alertmanager配置完毕! 1.创建编辑文件:vim /usr/local/prometheus/rules/node.yml # groups ...

  8. Cluster基础(一):配置iSCSI服务、编写udev规则、配置并访问NFS共享、部署Multipath多路径环境

    一.配置iSCSI服务 目标: 本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端: 虚拟机添加新的磁盘 将新添加的磁盘分区并创建两个逻辑卷 逻辑卷名称分别为:/dev/myvg/isc ...

  9. 099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类

    099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类 本文知识点:编写并测试Subject类 说明: ...

随机推荐

  1. python:django

    ====启动django==== python manager.py runserver --host 0.0.0.0 --port 9008 python manager.py runserver ...

  2. swift - 基础属性 - 属性写法

    var num1 : Int = 0 var num2 : Int = 5 /// 1.计算属性 var num3 : Int{ return num1 + num2 } /// 2.闭包属性 pri ...

  3. day 22 反射,双下方法

    反射: 反射:通过字符串去操作对象(类,空间等等)的属性或方法反射的四个方法 hasattr *** getattr *** setattr *** delattr *** # getattr 用法c ...

  4. 如何查看Chrome浏览器保存的账号密码

    之前告诉大家如何一键查看所有保存在IE里的所有密码(点击查看原文),现在来告诉大家如何一键查看Chrome浏览器的所有密码.某种意义上上,查看Chrome的密码比查看IE的更简单,因为查看IE密码还需 ...

  5. 一、MySQL的连接建立与权限

    一.MySQL的连接建立与权限 写这些的目的一是记录下工作这几年所学,算是成长脚印吧.二是复习一遍,也给自己当笔记看,通篇观点都属于个人理解较多.读者观看的时候也需要自己判断下是否正确,另外,记下一段 ...

  6. CentOS6.2网卡绑定配置

    下面主要介绍在CentOS6.2下使用系统自带的bonding进行网卡绑定的详细步骤,在此之前你可以看一下Linux网卡绑定探析,你也可以使用网卡绑定的脚本进行网卡绑定操作. 注意:请在配置前关闭Ne ...

  7. HDU 2255.奔小康赚大钱 最大权匹配

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  8. Vuebnb 一个用 vue.js + Laravel 构建的全栈应用

    今年我一直在写一本新书叫全栈Vue网站开发:Vue.js,Vuex和Laravel.它会在Packt出版社在2018年初出版. 这本书是围绕着一个案例研究项目,Vuebnb,简单克隆Airbnb.在这 ...

  9. Previous Permutation

    Similar to next permutation, the steps as follow: 1) Find k in the increasing suffix such that nums[ ...

  10. mongoDB(Linux)

    启动  service mongod start 安装好后,输入mongo进入控制台 创建数据库 use baseName db.createCollection("game_record& ...