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. stark组件之搜索【模仿Django的admin】

    一.先看下django的admin是如何做搜索功能的 配置一个search_fields的列表就可以实现搜索的功能 class testbook(admin.ModelAdmin): # 第一步,定义 ...

  2. Java_4.1 猜数字游戏

    猜数字游戏: 系统随机产生一个1-100之间的数字,用户输入一个数字,如果用户输入的数字和随机数一样,输出“恭喜,猜对了”:如果猜大了,输出“猜大了”:如果猜小了,就输出“猜小了”. 循环直到用户输入 ...

  3. AngularJS——第4章 数据绑定

    第4章 数据绑定 AngularJS是以数据做为驱动的MVC框架,所有模型(Model)里的数据经由控制器(Controller)展示到视图(View)中. 所谓数据绑定指的就是将模型(Model)中 ...

  4. Git下基本命令操作

    提前准备好一个文件夹,并且进入该文件夹. 1.clone Github 上的Repository,如: git clone git@github.com:Git账号用户名/项目名称.git 2.仓库初 ...

  5. Debug和汇编编译器masm对指令的不同处理

    我们在Debug和源程序中写入同样形式的指令 : "mov al,[0]","mov bl,[1]","mov cl,[2]"," ...

  6. C#中泛型的解释(object,list,var,dynamic的区别)

    泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能.泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的 ...

  7. 移动端 input 输入框实现自带键盘“搜索“功能并修改X

    主要利用html5的,input[type=search]属性来实现,此时input和type=text外观和功能没啥区别: html代码入下: <form action="" ...

  8. 服务器webapi集成极光推送学习笔记

    一路坎坷,坑死你!!!入坑需做好心理准备. 第一天: 其文档支持不给力,和微信的文档支持比起来能气死你,刚开始弄,看了一大堆东西,找不到头绪从哪里开始弄.只好找了一些文档,先了解了其基本原理,参考文章 ...

  9. 使用RSS订阅

    1.绪论 对某一主题完成一次文献检索后,我们希望能持续了解该主题最新文献,即实现文献追踪. 为此,搜索引擎和数据库厂商(数据源)提供一般两种订阅服务:邮件和RSS.订阅后,数据源会自动推送最新信息,免 ...

  10. iOS.Info.plist

    1. Custom message when asking for Address Book Permissions http://kevinyavno.com/blog/?p=176