django页面没反应/一直处于加载中/请求成功却不跳转:两种常见情况
2017-11-12 22:29
846 查看
使用Django的时候,页面请求正常,也没有报任何错误,甚至连警告都没有的情况下,页面却还是原地不动或者闪一下或者无限显示加载动画的情况适用本文。
这个问题描述比较笼统,但根据我目前遇到过两种情况来看,似乎都比较重要而且实用,所以打算分别讲述一下。
第一种:URL配置错误
页面闪一下,却原地不动,可能是这种情况。
例如有以下两个URL:
url(r'^foo/bar/', User.obama),
url(r'^foo/bar/trump/', User.trump),你会发现所有从foo/bar/到foo/bar/trump/的请求都毫无作用,但各种调试器查看器服务器控制台等都告诉你“200”,一切正常。
新学Django的朋友很可能犯这个错误。
归根结底其实也很可笑,就是正则表达式使用不正确:r'^ '是一个只限定了开头的正则表达式,没有限制结尾,所以一切以foo/bar/开头的URL都会在Django算法的作用下直接打开foo/bar/,而如果地址栏已经是foo/bar/的话,自然是“原地不动”了。毫无疑问,Django的算法是一旦找到一个匹配结果就立马显示,这的确是高效的,不需要去遍历所有的URL,但这也产生了以上问题。
解决方案:
url(r'^foo/bar/$', User.obama),
url(r'^foo/bar'/trump/', User.trump),
加上结束符号“$”,则Django就必须完全匹配方能跳转,则网页运行正常。
第二种:新页面的渲染过程中出现了“不可描述的错误”
我们知道,一旦Django或者Python代码出错,则会立刻反映到页面上,导致程序终止。但是写过前端的朋友一定清楚,无论是JS还是html还是css,都是非常“包容”的语言。简单来说:一点小错,无伤大雅;满篇错误,照样执行。如果不在调试环境下运行,那么任何错误百出的html页面都能“硬着头皮”运行下去。这一点也毫无疑问是有好有坏,好处自不必说,这让前端页面有了极高的容错率和兼容性,这简直是安身立命之本。但是坏处就是,一旦需要加载的页面出现了某些“致命”错误,也不会有报错信息,而是会导致页面莫名其妙地加载或者干脆“消失”。
解决这个问题的方法自然也很简单:完全模拟你要加载的页面(精确到每一个参数,每一个符号),然后在调试环境下独立打开,看看会不会出现一些致命的错误,如果没有,就人工检查一下。错误自然会出现。然后根据错误去修复即可。
下面我举一个我自己遇到的错误案例:
在新页面中,我需要利用django的模板传值,声明一个新的变量:
var foo={{ bar|safe }}但是传过来的{{ bar|safe }} 却是一个含有逗号的字符串,且不慎忽略掉了两边的引号,结果毫无疑问,这导致了一个致命的错误,页面长时间处于加载状态,但是毫无动静。
解决方案:正确传值或即可。
如果你的情况类似于这个案例,移步:http://blog.csdn.net/pluschang/article/details/78425523
这个问题描述比较笼统,但根据我目前遇到过两种情况来看,似乎都比较重要而且实用,所以打算分别讲述一下。
第一种:URL配置错误
页面闪一下,却原地不动,可能是这种情况。
例如有以下两个URL:
url(r'^foo/bar/', User.obama),
url(r'^foo/bar/trump/', User.trump),你会发现所有从foo/bar/到foo/bar/trump/的请求都毫无作用,但各种调试器查看器服务器控制台等都告诉你“200”,一切正常。
新学Django的朋友很可能犯这个错误。
归根结底其实也很可笑,就是正则表达式使用不正确:r'^ '是一个只限定了开头的正则表达式,没有限制结尾,所以一切以foo/bar/开头的URL都会在Django算法的作用下直接打开foo/bar/,而如果地址栏已经是foo/bar/的话,自然是“原地不动”了。毫无疑问,Django的算法是一旦找到一个匹配结果就立马显示,这的确是高效的,不需要去遍历所有的URL,但这也产生了以上问题。
解决方案:
url(r'^foo/bar/$', User.obama),
url(r'^foo/bar'/trump/', User.trump),
加上结束符号“$”,则Django就必须完全匹配方能跳转,则网页运行正常。
第二种:新页面的渲染过程中出现了“不可描述的错误”
我们知道,一旦Django或者Python代码出错,则会立刻反映到页面上,导致程序终止。但是写过前端的朋友一定清楚,无论是JS还是html还是css,都是非常“包容”的语言。简单来说:一点小错,无伤大雅;满篇错误,照样执行。如果不在调试环境下运行,那么任何错误百出的html页面都能“硬着头皮”运行下去。这一点也毫无疑问是有好有坏,好处自不必说,这让前端页面有了极高的容错率和兼容性,这简直是安身立命之本。但是坏处就是,一旦需要加载的页面出现了某些“致命”错误,也不会有报错信息,而是会导致页面莫名其妙地加载或者干脆“消失”。
解决这个问题的方法自然也很简单:完全模拟你要加载的页面(精确到每一个参数,每一个符号),然后在调试环境下独立打开,看看会不会出现一些致命的错误,如果没有,就人工检查一下。错误自然会出现。然后根据错误去修复即可。
下面我举一个我自己遇到的错误案例:
在新页面中,我需要利用django的模板传值,声明一个新的变量:
var foo={{ bar|safe }}但是传过来的{{ bar|safe }} 却是一个含有逗号的字符串,且不慎忽略掉了两边的引号,结果毫无疑问,这导致了一个致命的错误,页面长时间处于加载状态,但是毫无动静。
解决方案:正确传值或即可。
如果你的情况类似于这个案例,移步:http://blog.csdn.net/pluschang/article/details/78425523
相关文章推荐
- 跳转页面等待加载情况的解决
- 小白使用React---ajax请求成功后跳转到另一个页面
- jenkins 用 tomcat 启动 ,jenkins 页面 一直 处于 加载 中
- webView 加载页面的两种请求方式: get 和 post
- 关于 第三方接口支付的时候 采用post提交的方式,有两种 一种是通过 curl来进行,一种是通过js当页面加载完后跳转
- 自制Javascript分页插件,支持AJAX加载和URL带参跳转两种初始化方式,可用于同一页面的多个分页和不同页面的调用
- 解决jquery mobile的遇到高版本Chrome一直转圈,页面加载不出来的情况。
- Nginx Cors配置,解决由于Options请求导致的页面跳转情况
- SQL Server 2012 “对象资源管理器详细”页面一直处于“正在加载”的可尝试性解决方法
- 跳转到页面后加载一个请求的方法
- web 开发,个人中心每个请求,判断用户是否登录,若没有登录,则跳转到登录页面,登录成功后返回之前页面
- iOS 常见的两种页面跳转
- Django 1.11 前端数据异步加载(前端页面单独请求用户登录状态)
- ajax实现异步请求,不跳转页面的情况下,达到检验用户名等信息是否效果的功能!
- vue页面进入导致低版本apple机型出现一直加载但是进不去页面的情况
- django 常见页面的跳转,渲染,以及返回
- 手机android端的html5页面用ajax访问服务器,后台成功从数据库查询到值,但是前段一直调用ajax的error
- JSP中页面跳转的两种方式
- 两种方法实现在HTML页面加载完毕后运行某个js
- 我的shiro之旅: 十五 shiro 登录成功后,跳转到登录前的页面