先在根目录以及每个app内添加一个空白的urls.py(此处根目录指项目同名文件夹内)。程序收到用户请求时,先在根目录的urls.py查找该URL属于哪个app,再从app的urls.py找到具体的URL信息。根目录的urls.py配置如下:

from django.contrib import admin
from django.urls import path urlpatterns = [ # 整个项目的URL集合,每个元素代表一条URL信息
path('admin/', admin.site.urls), # 设定admin的URL,'admin/'代表127.0.0.1::8000/admin地址信息,admin后面的斜杠是路径分隔符,admin.site。urls是URL的处理函数,也称为视图函数
path('', include('index.urls')) # URL为空,代表为网站的域名,即127.0.0.1:8000,通常是网站的首页;include将该URL分发给index的urls.py处理
]

由于首页的地址分发给index的urls.py处理,因此下一步需对index的urls.py编写URL信息:

# index的urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index)
]

上述代码导入了同一目录下的views.py,该文件用于编写视图函数,处理URL请求信息并返回网页内容给用户。因此,在views.py中编写index函数的处理过程:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello World!")

index函数必须设置参数request,该参数代表当前用户的请求对象,该对象包含用户名、请求内容和请求方式等信息,视图函数执行完成后必须使用return将处理结果返回,否则会抛出异常。

带变量的URL

  • 字符类型str:匹配任何非空字符串,斜杠除外。若不指定类型则默认为该类型。
  • 整型int:匹配非负整数。
  • slug:可理解为注释、后缀或附属等概念,常作为URL的解释性字符。可匹配任何ACSII字符以及连接符和下划线,能使URL更加清晰易懂。比如网页标题是“13岁的孩子”,其URL地址可设为“13-sui-de-hai-zi”。
  • uuid:匹配一个uudi格式的对象。为防止冲突,规定必须使用破折号并且所有字母必须小写,如2134f-fd989-dajl5236。

    urls.py
# index的urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index),
path('<year>/<int:month>/<slug:day>', views.mydate)
]

views.py

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse("Hello World!") def mydate(request, year, month, day):
return HttpResponse(str(year) + '/' + str(month) + '/' + str(day))

在浏览器中输入http://127.0.0.1:8000/2019/12/24



引入正则表达式规范日期格式:

# index的urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
path('', views.index),
#path('<year>/<int:month>/<slug:day>', views.mydate),
re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)
]

在浏览器中输入http://127.0.0.1:8000/2019/12/24.html

注意:如果URL末端使用正则表达式,应加上斜杠或其他字符,否则正则表达式无法生效。如上例若没有.html,则在浏览器中输入无限长的字符串也能正常访问。

##设置参数name
Django还可对URL进行命名。在index中添加以下代码:
urls.py
```python
re_path('(?P[0-9]{4}).html', views.myyear, name='myyear')
```
views.py
```python
def myyear(request, year):
return render(request, 'myyear.html')
```
在templates文件夹中添加myyear.html:
```html

Title

```
整个执行流程:
1. 用户访问URL时,程序根据URL选择视图函数myyear处理,并将该URL命名为myyear。
2. 视图函数myyear将模板myyear.html作为响应内容并生产网页返回。
3. 在模板myyear.html中设置两个a标签,都指向命名为myyear的URL地址。
4. 第二个a标签的href为{%url 'myyear' 2019 %},这是Django的模板语法,以{% %}表示。其中url 'myyear'是将命名为myyear的URL地址信息作为href属性值;2019是该URL的变量year,若URL没有设置变量值,则无需添加。

上述例子可以看出,模板中的myyear与urls.py所设置的参数name是一一对应的。参数name的作用是对该URL地址信息进行命名,然后在HTML模板中使用可以生成相应的URL信息。



采用第一张方法设置每个a标签的href属性值,若URL地址信息变更,就要修改每个a标签的href属性值。而设置参数name,只要参数name的值不变,无论URL地址信息如何改变都无需修改模板中a标签的href属性值。

设置额外参数

参数类型是以字典的数据类型传递的,且该参数只能在视图函数中读取和使用。

Django学习笔记(二)URL编写规则的更多相关文章

  1. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  2. Django学习笔记之URL与视图

    视图 视图一般都写在app的views.py中.并且视图的第一个参数永远都是request(一个HttpRequest)对象.这个对象存储了这个http请求的所有信息,其中包括携带的参数以及一些头部信 ...

  3. django学习笔记二:一个项目多个App项目搭建

    django充许在一个项目中存在多个app,如一个大门户网站中可以包含论坛,新闻等内容,其中每一个模块称之为一个App,也可以理解为一个个独立的小型项目最终集成在一个门户网站中最终呈现给用户 本次测试 ...

  4. Django学习笔记之URL标签的使用

    期初用django 开发应用的时候,完全是在urls.py 中硬编码配置地址,在views.py中HttpResponseRedirect()也是硬编码转向地址,当然在template 中也是一样了, ...

  5. Django学习笔记之URL与视图cookie和session

    cookie和session cookie:在网站中,http请求是无状态的.也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户.cookie的出现就是为了 ...

  6. Django学习笔记(二):使用Template让HTML、CSS参与网页建立

    Django学习笔记(二):使用Template让HTML.CSS参与网页建立 通过本文章实现: 了解Django中Template的使用 让HTML.CSS等参与网页建立 利用静态文件应用网页样式 ...

  7. Django 学习笔记(二)

    Django 第一个 Hello World 项目 经过上一篇的安装,我们已经拥有了Django 框架 1.选择项目默认存放的地址 默认地址是C:\Users\Lee,也就是进入cmd控制台的地址,创 ...

  8. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  9. Django学习笔记(五)—— 表单

    疯狂的暑假学习之  Django学习笔记(五)-- 表单 參考:<The Django Book> 第7章 1. HttpRequest对象的信息 request.path         ...

  10. Django学习笔记(9)—— 开发用户注册与登录系统

    一,项目题目: 开发用户注册与登录系统 该项目主要练习使用Django开发一个用户注册与登录的系统,通过这个项目然后巩固自己这段时间所学习的Django知识. 二,项目需求: 开发一个简单的用户登录与 ...

随机推荐

  1. java 获取随机数的方法

    方法一: (数据类型)(最小值 + Math.random()*(最大值-最小值+1) ); 示例: (int)(1+Math.random()*(10-1+1)): 获取int类型 1-10的随机数 ...

  2. django查询优化及ajax编码格式下发送数据 总结

    orm查询优化 1)only与refer ​ only方法返回的是一个queryset对象,本质就是列表套数据对象 ​ 该对象内只含有only括号所指定的属性(其他属性也可以获取,但是需要重新走数据库 ...

  3. ubuntu 添加字体

    1. 下载自己需要安装的字体文件 eg: yaheiconsolashybrid.ttf 2. 将字体文件放在目录/home下 3. 到目录/usr/share/fonts/truetype/下建立目 ...

  4. 使用nodejs进行开发,concurrently模块,使我们同时执行多个命令。

    concurrently模块使用. 安装模块 npm install concurrently 配置concurrently 运行多个服务 当我们使用nodejs和vue混合开发的时候.当要同时启动后 ...

  5. c++回溯法求组合问题(取数,选取问题)从n个元素中选出m个的回溯算法

    假如现在有n个数,分别从里面选择m个出来,那么一共有多少种不同的组合呢,分别是哪些呢? 利用计算机的计算力,采用回溯算法很容易求解 程序源代码如下: #include<iostream># ...

  6. js获取用户当前页面复制的内容并修改

    如果只是单纯的获取页面上复制的内容可以使用window.getSelection()来获取选中的内容,在执行复制操作就可以了,但是如果想修改复制的内容可以先获取要复制的内容修改之后再用document ...

  7. 震惊!文科生如何三个月转行成为Java工程师?

    点击上方“程序员江湖”,选择“置顶或者星标” 你关注的就是我关心的! 作者:以大橘为重链接:https://www.nowcoder.com/discuss/156087 楼主是19届应届生,去年在牛 ...

  8. C++入门经典-例8.5-多重继承

    1:C++允许子类从多个父类继承公有的和受保护的成员,这称为多重继承. 2:多重继承的定义.多重继承有多个基类名称标识符,其声明形式如下: class 派生类名标识符:[继承方式] 基类名标识符1,. ...

  9. 20175215 2018-2019-2 第十周java课程学习总结

    第十二章 Java多线程机制 12.1 进程与线程 12.1.1 操作系统与进程 程序是一段静态的代码,它是应用软件执行的蓝本. 进程是程序的一次动态执行过程,它对应了从代码加载.执行至执行完毕的一个 ...

  10. LeetCode 130. 被围绕的区域(Surrounded Regions)

    题目描述 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O). 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充. 示例: X X X X X O O X X X ...