首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Django从1.11升级到2.2.1存在URL和路径问题

从Django 1.11升级到2.2.1确实可能会遇到URL和路径相关的问题,主要是因为Django 2.0引入了新的路径(path)函数和路径转换器,以及对URL配置的一些重大更改。以下是一些基础概念和相关问题的详细解答:

基础概念

  1. URL配置
    • Django使用urls.py文件来定义URL模式和视图函数的映射关系。
    • 在Django 1.11及之前的版本中,主要使用url()函数来定义URL模式。
    • Django 2.0引入了新的path()函数,提供了更简洁和易读的URL定义方式。
  • 路径转换器
    • 路径转换器用于将URL中的部分字符串转换为特定的数据类型(如整数、字符串等)。
    • Django 2.0引入了新的内置路径转换器,并允许自定义路径转换器。

升级过程中可能遇到的问题

  1. URL配置语法变化
    • url()函数在Django 2.0中被标记为弃用,推荐使用path()re_path()函数。
    • re_path()函数类似于旧的url()函数,但使用正则表达式来匹配URL。
  • 路径转换器变化
    • 新的路径转换器提供了更好的类型安全和更清晰的URL定义。

解决方案

示例代码

假设你在Django 1.11中有如下URL配置:

代码语言:txt
复制
# Django 1.11
from django.conf.urls import url
from myapp.views import my_view

urlpatterns = [
    url(r'^articles/(?P<year>[0-9]{4})/$', my_view, name='my-view'),
]

升级到Django 2.2.1后,可以改为:

代码语言:txt
复制
# Django 2.2.1
from django.urls import path, re_path
from myapp.views import my_view

urlpatterns = [
    path('articles/<int:year>/', my_view, name='my-view'),
]

或者使用re_path()来保持原有的正则表达式:

代码语言:txt
复制
# Django 2.2.1
from django.urls import re_path
from myapp.views import my_view

urlpatterns = [
    re_path(r'^articles/(?P<year>[0-9]{4})/$', my_view, name='my-view'),
]

应用场景

  • 简洁性path()函数提供了更简洁的语法,减少了正则表达式的使用,使URL配置更易读和维护。
  • 类型安全:路径转换器确保URL参数的类型正确,减少运行时错误。
  • 兼容性:对于复杂的URL模式,可以使用re_path()来保持原有的正则表达式逻辑。

总结

升级Django版本时,特别是从1.11升级到2.2.1,需要注意URL配置的变化。使用新的path()re_path()函数可以提高代码的可读性和维护性,同时利用路径转换器增强类型安全性。通过上述示例代码,你可以顺利地将旧的URL配置迁移到新的语法中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django 产品从1.X升级到2.X的移植

在书中我采用的版本是1.11.4,后来Django升级到了1.11.10,产品仍旧可以正常执行,但是当我把Django升级到2.X版本后,程序就不能运行了,参考了一下网上的资料,发现主要2.0的在路由方面做了改动...P[0-9]+)/$', views.view_goods), 我们可以看出,这里的: view_goods:为路径名; :int表示数字,参数名为good_id...关于int共有以下五类(这五类Django称作转换器): str,匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式 int,匹配正整数,包含0。...path,匹配任何非空字符串,包含了路径分隔符(/)(不能用问号,因为问号在url地址有特殊含义。) 这样我的代码就变成了如下形式。...首先我们打开settings.py文件,找到 # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11

69830

《Django企业开发实战》FAQ - 持续更新

---- 问:为什么用 Django 1.11 版本,而不是最新版。...Django 2.0 是截止到 2019 年 4 月份。 Django 1.11 最为兼容Python 2和3的最新的版本,是在使用 Python 2的公司能够用到的最新版本。...the5fire答: 图书是在视频之后产出的,基于Python3.6 和 Django 1.11(LTS版本),在书最后会升级到Django 2.0,内容上会更加细致。...视频是基于Python 2.7和Django 1.11(LTS版本) 的版本,最终会升级到 Python3.6 和 Django2.0,内容上会更加动态,信息量会更大,毕竟书上不能带着你写代码,视频是可以非常直观的演示代码编写的...书上的代码以及放到 Github 上的代码,都是在 Mac 系统和 Linux 系统上运行过的,如果你的 Windows 上,可能会遇到一些问题,你可以针对错误提示搜索一下,调整代码。

1.9K20
  • Django 系列博客(二)

    创建项目 前往目标路径创建项目,在这里我的 django 项目都在我的家目录下面的 django_project里面。 ? 进入要创建项目的路径下,使用下面的命令创建一个 django 项目。...'django.contrib.staticfiles', # 添加的自定义应用 'app', ] app目录结构 创建后的 app 目录结构和使用命令行创建的一样,下面来看看具体都有什么作用...: 'django.template.backends.django.DjangoTemplates', # 模板页面默认路径:项目根路径下的templates文件夹 '...source文件夹中的路径) url正则 原生字符串 # urls.py配置路由 url(r'test', app_view.test) # views.py设置响应函数 def test(request...8000/test # http://127.0.0.1:8000/test/ # 问题:不能作为应用总路由 # eg:app_test应用在项目urls.py # url(r'^app-test/'

    61620

    Django 使用 django-redis 作为缓存的正确用法,别忽略缓存的使用原则

    Django 自身也有一套相对完善的缓存系统,这篇文章来介绍一下使用 redis 作为 Django 缓存的使用方法,并且说一下我在使用缓存的过程中遇到的问题。...django-redis 在项目使用的虚拟环境中使用 pip 安装即可: pip install django-redis 不过需要提醒的是,因为 django-redis 是支持 django 1.11...以上的,所以如果你的 django 版本低于这个就会被自动升级为最新版(2.0的版本),所以我建议自己先把 django 自行升级到1.11的版本。...函数中使用缓存 函数中使用缓存是最基本的使用方法,跟在其他非 django 中使用的方式一致,无非就是使用 set() 和 get() 方法。...,我之前给我的很多视图函数还有URL路由添加了缓存,也就是缓存整个页面,后来发现出问题了,因为我的每个页面都有导航栏,而导航栏上面有登录和登出按钮,这样如果缓存起来的话,就无法让用户显示登录和登出了,并且

    4.8K10

    整合 Django + Vue.js 框架快速搭建web项目

    二、 环境准备 安装环境: Django系: Python 2.7 + Django 1.11 Mysql 5.7 Python的MySQLdb模块等 推荐python相关的模块(包括Django)都使用...,打开浏览器console确认: 这时候我们须要在Django层注入header,用Django的第三方包django-cors-headers来解决跨域问题: pip install...="index.html")), ] 2、 上一步使用了Django的模板系统,所以需要配置一下模板使Django知道从哪里找到index.html。...这里只提一点:如果为项目配置了nginx作为反向代理,那么要在nginx中配置所有的静态文件path都指向Django项目中配置的静态文件url,在settings.py中可配置url路径: # Static...files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL

    33K219

    HttpRunnerManager 接口自动化测试平台 搭建实践

    一、需要准备的知识点   1. linux: 安装 python3、nginx 安装和配置、mysql 安装和配置   2. python: django 配置、uwsgi 配置 二、我搭建的环境   ...生成数据库表和字段(在项目路径下执行) #生成数据迁移脚本 python manage.py makemigrations ApiManager #应用到db生成数据表 python manage.py...安装 和 配置 uwsgi      安装:pip install uwsgi     配置:ini_hrm.ini [uwsgi] socket = 127.0.0.1:9092 #socket =...Supervisor 守护 Celery worker、beat、flower 教程 >>> 四、访问链接   1. django 后台     url: http://192.168.1.254/admin...Celery 任务监控后台     url: http://192.168.1.254:5555/dashboard 五、两个问题点   1.

    44010

    Django 2.0 新款URL配置详解

    但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下: 一、实例 先看一个例子: from django.urls import path from . import views...默认情况下,Django内置下面的路径转换器: str:匹配任何非空字符串,但不含斜杠/,如果你没有专门指定转换器,那么这个是默认使用的; int:匹配0和正整数,返回一个int类型 slug:可理解为注释...返回一个UUID对象; path:匹配任何非空字符串,重点是可以包含路径分隔符’/‘。这个转换器可以帮助你匹配整个url而不是一段一段的url字符串。...re_path()方法在骨子里,根本就是以前的url()方法,只不过导入的位置变了。下面是一个例子,对比一下Django1.11时代的语法,有什么太大的差别?...五、总结 除了上面的部分,Django2.0路由系统其它的知识点和Django1.11的基本都是相同的,就是在写法上面有那么点小小的区别。

    1.4K50

    博客将 Django 1.11+ 升级到 Django 2.2+ 遇到的问题及规避方法

    之前就有人一直催我把博客的 Django 升级到 Django 2.0 以上,但是我一直懒得升级,因为我早就看过 Django 2.x 版本和 1.11.x 版本,其实没有太多的不同,所以没有找到需要升级的必要...但是,秉着向新技术看齐的态度,我还是花了些时间(大概半天)把博客依赖的 Django 升级到当前最新版的 Django 2.2.6 版本了,在升级的过程中也遇到了很多问题,这些问题也是之前考虑到的,所以基本都迎刃而解了...PyMySQL 版本报错 报错现象 将 Django 升级到 2.2 以上版本之后,会发现如下报错: ......规避方法 首先,Django 2.x 跟 Django 1.x 最明显的修改就是在路由的格式,可以使用 path 替换之前使用的 url,会显得更简单,下面是我修改的: # blog app 的写法 path...migrate 报错 由于 django 2.2+ 的 auth 应用中的数据库迁移文件比 1.11+ 的版本多了几个,所以按理需要把这几个迁移文件添加到数据库中,但是由于我添加了 oauth 应用,这个应用必须依赖

    98320

    Python进阶26-Django 视图层

    创建Django项目 静态文件配置 完整版登陆功能 新手三件套 HttpRequest对象 HttpResponse对象 JsonResponse CBV和FBV 简单的文件上传.../howto/static-files/ STATIC_URL = '/static/' ## 添加下面的内容,添加static的路径 STATICFILES_DIRS = [ os.path.join...4.HttpRequest.path   一个字符串,表示请求的路径组件(不含域名)。   ...301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取 (用户看到的效果就是他输入的地址A瞬间变成了另一个地址...import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin

    1.9K20

    Nginx基本使用大全

    Nginx大全 本文主要记录平时如何使用Nginx和遇到的问题 #1 环境 Mac CentOS6.8 Nginx uwsgi #2 使用 #2.1 安装 安装分为两种,一种是在Mac,另一种是CentOS...yum.repos.d/nginx.repo [nginx] name=nginx repo # 下面这行centos根据你自己的操作系统修改比如:OS/rehel # 6是你Linux系统的版本,可以通过URL...#2.2 查找配置文件路径 #2.2.1 Mac brew info nginx Coxs-MacBook-Air:nginx coxhuang$ Coxs-MacBook-Air:nginx coxhuang.../nginx/error.log; 注: /Users/coxhuang/Documents/django_code/blog_code/logs/nginx/ 该路径必须已经存在,如果不存在,Nginx...从查询结果可以看到root 用户属于 wheel组,那我的写法就不对了,它找不到root组,所以需要改下配置文件: user root wheel; ...

    53030

    Python3+django+nginx

    1 环境介绍和准备 Python3+django+nginx+uwsgi使用场景部署 当我们写完一套完整的网站功能,我们需要实时在生产环境上线,并需要容纳高并发的访问请求。...3.1 初始化环境 mkdir ~/reboot /usr/local/python36/bin/virtualenv ~/reboot/env 3.2 安装django 1.11 source /root.../reboot/env/bin/activate pip install "django>=1.11" pip install ipython 4 mysql环境准备: 搜狐镜像:http://mirrors.sohu.com...配置 7.1 django配置修改: setting.py中添加设置静态资源路径,给nginx调用 django可以在自己的templates下面放静态资源 那个命令可以吧所有静态资源收集起来 STATIC_ROOT...并且重启nginx服务,发现问题依然存在。 ? 通过检查nginx服务发现,nginx线程为nginx用户启动 ?

    56310
    领券