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类 说明: ...
随机推荐
- TZOJ 2018 SPF(连通图割点和分成的连通块)
描述 Consider the two networks shown below. Assuming that data moves around these networks only betwee ...
- PAT L3-010 是否完全二叉搜索树(二叉搜索树)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...
- webpack.dev.conf.js
var utils = require('./utils')var webpack = require('webpack')var config = require('../config') // 一 ...
- Web API中常用Filter的执行顺序举例讲解
在WEB Api中,引入了面向切面编程(AOP)的思想,在某些特定的位置可以插入特定的Filter进行过程拦截处理.引入了这一机制可以更好地践行DRY(Don’t Repeat Yourself)思想 ...
- sql建立一种,自定义的执行作业
USE [chongwu] GO /****** Object: StoredProcedure [dbo].[p_createjob] Script Date: 01/21/2016 14:32:0 ...
- C# 出现base-64 字符数组的无效长度的解决办法
最近的一个项目,在传递参数时,在Win2003上正常,在Win7下抛出“base-64 字符数组的无效长度”这样的错误 对比了一下经过Convert.ToBase64String()转换过的参数发现, ...
- Spring Boot 2.0(三):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- 转录组的组装Stingtie和Cufflinks
转录组的组装Stingtie和Cufflinks Posted: 十月 18, 2017 Under: Transcriptomics By Kai no Comments 首先这两款软件都是用 ...
- lazarus的动态方法和虚拟方法
动态方法和虚拟方法在delphi里面分别表示: 动态方法 当需要调用父类.祖先类的被覆盖方法的时候,是查找继承树,当找到,就调用.减少了VMT占用,但调用慢一些. 虚拟方法 和动态方法不同的是,记录了 ...
- PHP 判断字符串括号是否匹配
<?php function aa($str) { $temp = array(); for ($i = 0; $i < strlen($str); $i++) { $t = $str[$ ...