2013-08-03 41 views
0

我試圖動態顯示某個對象的細節,從sqlite3數據庫中獲取它們。我在一個教程上基於我的代碼,一切都完全一樣,但我的頁面上出現500內部服務器錯誤(但教程完美運行)。如何讓json使用django和jquery ajax?有500內部服務器錯誤

我安裝了python 3.3和django 1.6。

這裏是我的代碼:

url.py:

url(r'^cargar-inmueble/(?P<id>\d+)$', 'inmobiliaria.views.cargar_inmueble', name='cargar_inmueble_view'), 

views.py:

import json 
from django.http import HttpResponse, Http404 
from inmobiliaria.models import * 

.... 

def cargar_inmueble(request, id): 
    if request.is_ajax(): 
     inmueble = Inmueble.objects.get(id=id) 
     return HttpResponse(json.dumps({'nombre': inmueble.nombre, 
     'descripcion': inmueble.descripcion, 'foto' : inmueble.foto }), 
     content_type='application/json; charset=utf8') 
    else: 
     raise Http404 

hover.js(這是主要的js腳本,必須將其重命名)

$(document).on("ready", inicio); 

function inicio() { 

    ... 

    $("#slider ul li.inmueble").on("click", "a", cargar_inmueble); 
} 

function cargar_inmueble(data) { 

    var id = $(data.currentTarget).data('id'); 

    $.get('cargar-inmueble/' + id, ver_inmueble); 

} 

望着公司每當我點擊一個叫做「cargar_inmueble」的鏈接,我得到這個error和「ver_inmueble」永遠不會被調用。這是我第一個使用python的網站,所以我很迷茫!

回答

0

檢查chrome開發工具的網絡選項卡,然後您將知道問題的根源。

另一種方法來調試是爲了簡化您的看法:

def cargar_inmueble(request, id): 
    inmueble = Inmueble.objects.get(id=id) 
    return HttpResponse(json.dumps({'nombre': inmueble.nombre, 
     'descripcion': inmueble.descripcion, 'foto' : inmueble.foto }), 
     content_type='application/json; charset=utf8') 

然後去http://localhost:8000/cargar-inmueble/1直接,你會看到堆棧跟蹤,如果你在settings.py離開DEBUG=True

最有可能這條線可能會導致錯誤:

inmueble = Inmueble.objects.get(id=id) 

id不存在,它會拋出異常DoesNotExist,你應該抓住它。我也相信返回JSON是你在做什麼有點不同:

def cargar_inmueble(request, id): 
    try: 
     inmueble = Inmueble.objects.get(id=id) 
    except Inmueble.DoesNotExist: # catch the exception 
     inmueble = None 

    if inmueble: 
     json_resp = json.dumps({ 
      'nombre': inmueble.nombre, 
      'descripcion': inmueble.descripcion, 
      'foto' : inmueble.foto 
     }) 
    else: 
     json_resp = 'null' 

    return HttpResponse(json_resp, mimetype='application/json') 

當然你也可以使用get_object_or_404進行簡單的代碼。我只想顯示基本的想法。

希望它有幫助。

+0

我想,而不是 json_resp ='', json_resp ='null'會更好。客戶端的JSON解析器會將''視爲無效的JSON。 – sul4bh

+0

對,我想我現在太困了,不能回答。謝謝 –

相關問題