#json #ajax #django #post
#json #ajax #django #Публикация
Вопрос:
Я пытаюсь ввести слово и отобразить его на странице через ajax. Мне не хватает чего-то простого…
Итак, я отправляю такую информацию с помощью Jquery:
$.ajax({
url: url,
type:"POST",
data:{'word': word},
success: function(data){
//do something
}
});
и информация попадает в представление и сохраняется в БД. Проблема возникает, когда я пытаюсь вернуть новое слово:
def add_word(request, lecture_id):
l = get_object_or_404(Lecture, pk=lecture_id)
if request.method == "POST":
#see if there is a value with p
if request.POST.has_key('word') and request.POST['word'] != "":
success = {}
try:
oldWord = l.post_set.get(word=request.POST['word'])
except:
newWord = l.post_set.create(word=request.POST['word'], count = 1)
success = {'new': str(newWord.word), 'count': str(newWord.count)}
else:
oldWord.count = 1
oldWord.save()
success = {'old': str(oldWord.word), 'count': str(oldWord.count)}
return HttpResponse(json.dumps(success), mimetype="application/javascript")
return HttpResponse(reverse('post.views.lecture_display', args=(l.id,)))
Я получаю ошибку 500…
[13/Oct/2011 15:14:48] "POST /lecture/3/add HTTP/1.1" 500 66975
Комментарии:
1. Эта ошибка 500 является трассировкой. Вы должны посетить этот URL-адрес в своем браузере, чтобы увидеть, что это такое.
2. Вам также придется опубликовать все представление.
Ответ №1:
Не видя трассировки, я предполагаю, что сбой является [одним из]:
# A) This path is not resolving correctly (see named-URLs in Django's docs)
reverse('post.views.lecture_display', args=(l.id,))
# B) This word has unicode data, which can't simply be passed to ``str``
str(oldWord.word)
Откройте URL-адрес прямо в своем браузере, и вы получите обратную трассировку Django по умолчанию, 500 просмотров.
Комментарии:
1. @captDaylight — что в итоге стало исключением?
Ответ №2:
Я думаю, вам нужно научиться отладке, а не конкретному исправлению.
- Попробуйте открыть этот URL-адрес без данных post, посмотрите, есть ли ошибка синтаксиса или имени.
-
Если проблема не устранена, используйте
ipdb
orpudb
package, вставьте следующую строку в представление и проанализируйте, что происходит внутри вашего кода:определить myview(запрос, идентификатор): импортировать ipdb; ipdb.set_trace()
Используйте инструменты разработчика Chrome или Firebug, чтобы увидеть, что выводит сервер и какие URL-адреса он открывает. Также взгляните на панель инструментов отладки Django и Werkzeug. Панель инструментов отладки может показать вам все шаблоны, которые были отображены, и все локальные переменные. Werkzeug также предоставляет вам отладочную оболочку в любом месте стека вызовов прямо из браузера.