03 编写URL规则
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规则的更多相关文章
- 《玩转Django2.0》读书笔记-编写URL规则
<玩转Django2.0>读书笔记-编写URL规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. URL(Uniform Resource Locator,统一资源定位 ...
- 玩转Django2.0---Django笔记建站基础三(编写URL规则)
第三章 编写URL规则 URL(Uniform Resource Locator,统一资源定位符)是对可以从互联网上得到的资源位置和访问方法简洁的表示,是互联网上标准资源的地址. 在App里由于Dja ...
- PHPCMS V9静态化HTML生成设置及URL规则优化
先讲讲Phpcms V9在后台怎么设置生成静态化HTML,之后再讲解怎么自定义URL规则,进行URL地址优化.在这一篇中,伪静态就不涉及了,大家可以移步到Phpcms V9全站伪静态设置方法. 一.静 ...
- thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
原文:thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成(十五) 本章节:详细介绍thinkphp URL规则.URL伪静态.URL路由.URL重写.URL生成 一.URL ...
- flask动态url规则
动态URL规则 URL规则可以添加变量部分,也就是件更符合同规则的URL抽象成一个URL模式. @app.route('/item/<id>') def item(id): return ...
- Linux防火墙基础与编写防火墙规则
Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根 ...
- Prometheus 编写告警规则案例
Prometheus 编写告警规则案例 注:确保alertmanager配置完毕! 1.创建编辑文件:vim /usr/local/prometheus/rules/node.yml # groups ...
- Cluster基础(一):配置iSCSI服务、编写udev规则、配置并访问NFS共享、部署Multipath多路径环境
一.配置iSCSI服务 目标: 本案例要求先搭建好一台iSCSI服务器,并将整个磁盘共享给客户端: 虚拟机添加新的磁盘 将新添加的磁盘分区并创建两个逻辑卷 逻辑卷名称分别为:/dev/myvg/isc ...
- 099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类
099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类 本文知识点:编写并测试Subject类 说明: ...
随机推荐
- ES5之函数的间接调用 ( call、apply )、绑定 ( bind )
call().apply()的第一个实参是函数调用的上下文,在函数体内通过this来获得对它的引用. call()将实参用逗号分隔:apply ()将实参放入数组.类数组对象中. function h ...
- TZOJ 3209 后序遍历(已知中序前序求后序)
描述 在数据结构中,遍历是二叉树最重要的操作之一.所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问. 这里给出三种遍历算法. 1.中序遍历的递归算法定义: ...
- JS编程题练习
JS编程题练习 1. 两个数组合并成一个数组排序返回 先依次比较两个数组,按照小的就传入新的数组.当这次比较完之后可能有一个数组的长度很长,留下一些数组,然后在新数组的末尾插入即可. function ...
- mysql中各种join连表查询总结
通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...
- centos7下docker1.12.5学习笔记
一.Docker简介 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相 ...
- Vue 局部组件和全局组件的使用
<template> <div id="app"> <!--<img alt="Vue logo" src="./ ...
- Oracle_PL/SQL(1) 匿名块
1. PL/SQL 简介PL/SQL是一种比较复杂的程序设计语言, 用于从各种环境中访问Oracle数据库.为什么使用PL/SQL?Orade是一种关系型数据库, 用来访问关系型数据库的语言是 “结构 ...
- 利用Swoole编写一个TCP服务器,顺带测试下Swoole的4层生命周期
1首先我们写一个入口脚本,这里简单点的功能就是开启服务和关闭服务 <?php //CLI命令 if(isset($argv[1]) && in_array($argv[1], [ ...
- VFIO简介 (转载)
VFIO简介 LTCChina | Nov 20 2013 | Comment (1) | Visits (15204) 概述 VFIO是一套用户态驱动框架,它提供两种基本服务: 向用户态提供访问硬件 ...
- linux系统中的进程状态分析
转载地址:https://blog.csdn.net/shenwansangz/article/details/51981459 linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序, ...