django的一个很棒的功能是在On 500错误上返回的调试页面。Django调试错误页面无法在AJAX调用上工作
但是,在AJAX调用中,我收到了在DEBUG = False
时会出现的纯文本错误。执行非AJAX请求时不会发生此问题:如果发生Internet服务器错误,则返回“正常”请求,然后返回漂亮的调试页。
我昨天升级了从django 1.3升级到1.5。
我的settings.py有folllowing:
DEBUG = True
TEMPLATE_DEBUG = True
TEMPLATE_CONTEXT_PROCESSORS contain django.core.context_processors.debug
我已经重置了settings.py
为 '出厂设置',但问题仍然存在。受影响的最简单的代码
例子 - 看到,即使是最简单的代码受到影响:
def webservice(request):
raise KeyError
return HttpResponse('it didnt work')
这是由下面的请求被称为:
$.post('/webservice/', {'a':1, 'b':2})
必须指出的是,我使用jquery,并且这个小宝贝如此将csrf_token添加到请求中:
$(document).ajaxSend(function(event, xhr, settings) {
function sameOrigin(url) {
var host = document.location.host, // host + port
protocol = document.location.protocol,
sr_origin = '//' + host,
origin = protocol + sr_origin;
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
function safeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", '{{csrf_token}}');
}
});
解决方案
行为在1.4中更改为仅当请求是ajax时返回回溯。下面是如何有选择地把功能回(这是非常有用的,当你的工作主要是在Ajax请求的域名):从
if request.is_ajax():
编辑django.views.debug
65行
if request.is_ajax() and settings.MINIFY_505_ON_AJAX
:
然后在settings.py
请包含您的某个AJAX请求的代码。 – 2013-04-03 19:55:12