前言

我们在浏览器访问一个网页是通过url地址去访问的,django管理url配置是在urls.py文件。当一个页面数据很多时候,通过会有翻页的情况,那么页数是不固定的,如:page=1.
也就是url路径里面带参数时候如何去处理呢?

urls.py配置规则

由于django版本比较多,在查资料时候,也会看到不同的版本用不同写法,对于初学者来说是比较迷惑的,
总结了下,主要有三个:path、re_path、url,接下来具体分析下这三个有什么区别。

  • path 只能绝对匹配路径地址,不支持正则匹配
  • re_path 支持正则匹配,django 1.x版本常用
  • url 支持正则匹配,实际上就是return re_path, django2.x版本推荐
# helloworld/urls.py
from django.conf.urls import url
from django.urls import re_path, path
from hello import views urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^demo/$', views.demo),
]

在浏览器上访问http://127.0.0.1:8000/index/, http://127.0.0.1:8000/, http://127.0.0.1:8000/demo/ 发现都能正确访问到对应内容。

打开path()和re_path()源码,就能看到path()的匹配规则是RoutePattern, re_pat()h匹配规则是RegexPattern

path = partial(_path, Pattern=RoutePattern)
re_path = partial(_path, Pattern=RegexPattern)

再打开url()对应的源码,实际上就是return re_path(),后续统一用url()就可以了。

def url(regex, view, kwargs=None, name=None):
return re_path(regex, view, kwargs, name)

匹配路径统一在后面加个/,前面不用加/,如:index/、demo/、demo/page/

url是部分动态

当访问的页面有分页的情况,对应的页数就不能写死,如访问:http://127.0.0.1:8000/demo/page=1 ,那就不能这样写死了

url('^demo/page=1$', views.demo)

如果想匹配任意的页数,前面的部分demo/page=不变,匹配任意数字,可以用正则\d+匹配

url('^demo/page=\d+$', views.demo)

这样在浏览器上输入任意page页数都能访问一个固定地址,依然不是我们想要的结果,我们希望不同的页数,访问不同的地址,于是可以写个带参数的视图函数

hello/views.py文件写个带参数的视图函数,当输入的page=后面不是数字就抛个异常404

from django.shortcuts import render
from django.http import HttpResponse, Http404 # Create your views here. def index(request):
return HttpResponse("Hello world ! django ~~") def demo(request):
return render(request, 'demo.html') def page(request, num):
try:
num = int(num)
return render(request, 'demo.html')
except:
raise Http404

urls.py配置

from django.conf.urls import url
from django.urls import re_path, path
from hello import views
urlpatterns = [
path("index/", views.index),
re_path('^$', views.index),
url('^demo/$', views.demo),
url('^demo/page=(\d+)$', views.page),
]

接下来可以浏览器输入:http://127.0.0.1:8000/demo/page=222 ,能返回demo.html页面。
视图函数里面返回的是一个静态的demo.html模板页面,后面会讲模板参数化配置

404报错页面

如果输入的page不是数字,如:http://127.0.0.1:8000/demo/page=aa , 会出现报错页面:Page not found (404)

看到这种报错页面,因为Django设置文件setting.py里面有个参数 DEBUG = True,将其更改为False,Django将显示标准的404页面。

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True ALLOWED_HOSTS = []

由于处于开发阶段,DEBUG 默认为True,当开发完成正式发布产品上线时,需要将DEBUG = False

ALLOWED_HOSTS

ALLOWED_HOSTS是域名访问权限,设置可以访问的域名,默认值为空[], 只允许localhost或127.0.0.1在浏览器上访问。
DEBUG 改成False之后,需要重新启动服务,同时需要加个ALLOWED_HOSTS 地址,如果想让所以的域名都能访问,可以设置为:ALLOWED_HOSTS = ["*"]

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False ALLOWED_HOSTS = ["*"]

执行:>python manage.py runserver 重新启动后,出现404就是下面这种标准的了

django更多关于urls学习可以参考【https://docs.djangoproject.com/zh-hans/2.0/topics/http/urls/】

django_url配置的更多相关文章

  1. 配置android sdk 环境

    1:下载adnroid sdk安装包 官方下载地址无法打开,没有vpn,使用下面这个地址下载,地址:http://www.android-studio.org/

  2. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  3. react-router 组件式配置与对象式配置小区别

    1. react-router 对象式配置 和 组件式配置    组件式配置(Redirect) ----对应---- 对象式配置(onEnter钩子) IndexRedirect -----对应-- ...

  4. 总结:Mac前端开发环境的搭建(配置)

    新年新气象,在2016年的第一天,我入手了人生中第一台自己的电脑(大一时好友赠送的电脑在一次无意中烧坏了主板,此后便不断借用别人的或者网站的).macbook air,身上已无分文...接下来半年的房 ...

  5. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  6. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

  7. [linux]阿里云主机的免登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  8. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  9. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

随机推荐

  1. 超链接 a 标签点击时,弹出提示框,可以按照如下来写

    onclick="return confirm('确定删除该条记录?')" 加上这条记录后,就可以在访问href属性指向的链接时,有弹出提示

  2. 有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action

    有个奇怪的问题,配置成/system/index,jsp页面时没有经过过滤器进行拦截,而配置成redirectAction时是可以直接跳转刀片loginJsp.action 但是我直接访问/syste ...

  3. jackson-databind-2.2.3.jar,ackson-annotations-2.2.3.jar和jackson-core-2.2.3.jar下载

    jackson包开发下载,包括如下3个jar文件 jackson-databind-2.2.3.jar,还需要jackson-annotations-2.2.3.jar和jackson-core-2. ...

  4. mysql数据库总结笔记

    一.安装和配置数据库: 下载mysql地址:https://dev.mysql.com/downloads/mysql/ windows下载的版本是installer msi版本:https://de ...

  5. JAVA将文件转换成byte数组(byte[])

    /** * 将文件转换成byte数组 * @param filePath 文件File类 通过new File(文件路径) * @return byte数组 */ public static byte ...

  6. JAVA从字符串中提取纯数字

    /** * 从字符串中提取纯数字 * @param str * @return */ public static String getNumeric(String str) { String regE ...

  7. 【LeetCode】857. Minimum Cost to Hire K Workers 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/minimum- ...

  8. 【LeetCode】688. Knight Probability in Chessboard 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/knight-pr ...

  9. 玩转 ByteBuffer

    为什么要讲 Buffer 首先为什么一个小小的 Buffer 我们需要单独拎出来聊?或者说,Buffer 具体是在哪些地方被用到的呢? 例如,我们从磁盘上读取一个文件,并不是直接就从磁盘加载到内存中, ...

  10. 「THUSCH 2017」大魔法师

    Description 大魔法师小 L 制作了 \(n\) 个魔力水晶球,每个水晶球有水.火.土三个属性的能量值.小 L 把这 \(n\) 个水晶球在地上从前向后排成一行,然后开始今天的魔法表演. 我 ...