Django дамп данных JSON

#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:

Я думаю, вам нужно научиться отладке, а не конкретному исправлению.

  1. Попробуйте открыть этот URL-адрес без данных post, посмотрите, есть ли ошибка синтаксиса или имени.
  2. Если проблема не устранена, используйте ipdb or pudb package, вставьте следующую строку в представление и проанализируйте, что происходит внутри вашего кода:

    определить myview(запрос, идентификатор): импортировать ipdb; ipdb.set_trace()

Используйте инструменты разработчика Chrome или Firebug, чтобы увидеть, что выводит сервер и какие URL-адреса он открывает. Также взгляните на панель инструментов отладки Django и Werkzeug. Панель инструментов отладки может показать вам все шаблоны, которые были отображены, и все локальные переменные. Werkzeug также предоставляет вам отладочную оболочку в любом месте стека вызовов прямо из браузера.