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