前言

我们在浏览器访问一个网页是通过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. 【手把手教程】uniapp + vue 从0搭建仿斗鱼虎牙直播App:腾讯云MLVB移动直播实践连麦PK+带货

    基于uniapp + vue 实现仿斗鱼虎牙腾讯云移动直播应用实践,实现以下功能 1: 用户登陆 2: 房间管理 3: 房间聊天 4: 直播美颜 5: Svga礼物动画 6: 一对一连麦观众 项目开发 ...

  2. ubantu电脑无法开机修复

    重启Ubuntu,随即长按F9进入grub菜单:在grub菜单中,选择recovery mode,回车确认:在Recovery Menu中,选择"Root Drop to root shel ...

  3. wayne编译支持k8s1.16+

    GitHub: https://github.com/Qihoo360/wayne 文档: 由于wayne 官方文档链接已经失效了,我们可以通过这里查看 wayne 文档, 除了这个地方,我们询问之前 ...

  4. UDP&串口调试助手用法(4)

    接收配置用法 概览 保存文件 可将数据保存到文件和文件夹 如果选择的时文件,则需要自己手动选择保存的文件. 如果选择的时文件夹,则需要指定文件夹的类型和文件的后缀 支持保存文件类型: 文本文件和二进制 ...

  5. 【LeetCode】904. Fruit Into Baskets 解题报告(Python)

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

  6. 分割字符串StringTokenizer

    StringTokenizer 原来是一个遗留类,并未被废弃,只是出于兼容性原因而被保留,在新代码中已经不鼓励使用它了,建议使用 String 的 split 方法或 java.util.regex ...

  7. 第二十四个知识点:描述一个二进制m组的滑动窗口指数算法

    第二十四个知识点:描述一个二进制m组的滑动窗口指数算法 简单回顾一下我们知道的. 大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法.因此,现代密码学需要大指数模幂算法的有效实现.我 ...

  8. JS调用摄像头拍照,编辑jscam.swf自定义清晰度,兼容IE

    超级简单自定义宽高的jscam.swf文件: 下载swfmill,地址:http://download.csdn.net/download/wu3431214/9967414 下载mtasc,地址:h ...

  9. oracle中connect by prior的使用

    作用 connect by主要用于父子,祖孙,上下级等层级关系的查询 语法 { CONNECT BY [ NOCYCLE ] condition [AND condition]... [ START ...

  10. MySQL数据库基础(2)表结构管理

    目录 一.关系模型与数据表 二.MySQL数据类型 三.数据完整性约束 四.参照完整性约束 一.关系模型与数据表 概念 ①关系模型:是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上 ...