0

sqlite3 データベースから取得して、特定のオブジェクトの詳細を動的に表示しようとしています。チュートリアルに基づいてコードを作成しました。すべてがまったく同じですが、ページで 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);

}

Chrome 開発ツールのコンソールを見ると、「cargar_inmueble」を呼び出すリンクをクリックするたびに、このエラーが発生し、「ver_inmueble」が呼び出されません.. Python を使用する最初の Web サイトなので、かなり迷っています!

4

1 に答える 1

0

Chrome 開発ツールのネットワーク タブを確認すると、問題の原因がわかります。

デバッグするもう 1 つの方法は、ビューを単純化することです。

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ておくとスタック トレースが表示されます。DEBUG=Truesettings.py

ほとんどの場合、次の行でエラーが発生する可能性があります。

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、より単純なコードにも使用できます。基本的な考え方を示したいだけです。

それが役に立てば幸い。

于 2013-08-03T23:29:09.053 に答える