Buongiorno a tutti.
Sto seguendo il libro di Marco BERI, relativamente all'implementazione
di jquery.
Utilizzo django 1.2, puthon 2.6 e XP.
Ovviamente non ho ottenuto i risultati visibili nel libro.
Purtroppo non sono abbastanza sgamato da potermela cavare da solo e
sopratutto
non conosco assolutamente jquery...
i miei snippets (si dice così?) sono:
#views.py
from libreria.models import *
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, HttpResponseNotModified
from django.http import HttpResponseBadRequest, Http404
from django.shortcuts import get_object_or_404
from django import forms
from django.template import *
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
@login_required
@require_POST
def modifica_titolo(request, libro_pk):
print "---------TEST is_AJAX"
if request.is_ajax and request.user.is_staff:
print "------------------> test request_is_ajax PASSATO"
titolo = unicode(request.POST.get('titolo')).strip() #preso
dal dict POST
if not titolo or Libro.objects.exclude(pk=libro_pk
).filter(titolo__iexact=titolo).count()
>0:
return HttpResponseBadRequest(content='success')
libro = get_object_or_404(Libro, pk=libro_pk)
if libro.titolo != titolo: # controlla se il titolo viene
modificato
libro.titolo = titolo
libro.save()
print "------------------------------> TITOLO
MODIFICATO!!!!"
return HttpResponse(content = 'success')
print "!!!! TITOLO NON MODIFICATO!!!"
return HttpResponseNotModified(content='success') # dice se il
titolo non viene mod.
return HttpResponseBadRequest(content='Ko') # dice se la request
non e' Ajax
.......
questo è invece il contenuto di
http://127.0.0.1:8000/media/js/modifica-titolo.js
(correttamente caricato)
$(document).ready(function() {
$('.modifica-titolo').css("margin", "0");
$('.modifica-titolo').change(function(){
var input = $(this);
$.ajax({
url: "./"+ input.attr('name') + "/titolo/",
data: "titolo="+input.attr('value'),
type: "POST",
complete: function(xmlHttpRequest, message){
if (message == 'success') {
input.css("border", "1px solid green");
} else {
input.css("border", "1px solid red");
}
},
});
});
});
Al momento della modifica del titolo del libro, quest'ultimo viene
correttamente
modificato (vedo anche un accenno di cornice rossa nella cella), ma si
scatenano i seguenti errori:
Traceback (most recent call last):
File "C:\Programmi\Python26\lib\site-packages\django\core\servers
\basehttp.py", line 281, in run
self.finish_response()
File "C:\Programmi\Python26\lib\site-packages\django\core\servers
\basehttp.py", line 321, in finish_response
self.write(data)
File "C:\Programmi\Python26\lib\site-packages\django\core\servers
\basehttp.py", line 400, in write
self.send_headers()
File "C:\Programmi\Python26\lib\site-packages\django\core\servers
\basehttp.py", line 464, in send_headers
self.send_preamble()
File "C:\Programmi\Python26\lib\site-packages\django\core\servers
\basehttp.py", line 382, in send_preamble
'Date: %s\r\n' % http_date()
File "C:\Programmi\Python26\lib\socket.py", line 297, in write
self.flush()
File "C:\Programmi\Python26\lib\socket.py", line 284, in flush
self._sock.sendall(buffer)
error: [Errno 10053] Connessione interrotta dal software del computer
host
sopratutto ho notato che se invece "non modifico" il titolo, non
succede nulla, ovvero,
alla pressione del tasto invio, ottengo
[17/Nov/2010 12:05:35] "POST /admin/libreria/libro/ HTTP/1.1" 200 7103
[17/Nov/2010 12:05:35] "GET /admin/jsi18n/ HTTP/1.1" 200 3139
[17/Nov/2010 12:05:35] "GET /media/js/modifica-titolo.js HTTP/1.1" 304
0
[17/Nov/2010 12:10:08] "POST /admin/libreria/libro/ HTTP/1.1" 200 7103
[17/Nov/2010 12:10:08] "GET /admin/jsi18n/ HTTP/1.1" 200 3139
con lo status_code = 304 che mi indica che in realtà
l'HttpResponseNotModified è avvenuto, ma non
tramite il method modifica_titolo (di views.py), altrimenti avrei
visto i miei umili print di debug.
Ho ovviamente googlato, ma senza trovare qualcosa di utile alla causa
(che abbia capito...).
Qualcuno può aiutarmi a capire ?