Проблема с ajax / jquery и django - PullRequest
       6

Проблема с ajax / jquery и django

0 голосов
/ 11 октября 2009

Я хочу отправить значение на сервер. Я отправляю его с помощью:

$.post("http://127.0.0.1:8000/search/",{'long':"30"});

и мои views.py :

def search(request):   
    lon = request.POST.get('long','')  
    place = Places.objects.filter(longtitude__icontains=lon)  
    if place is not None:  
        return render_to_response('sr.html', {'place': place, 'query': lon})  
    else:  
        return HttpResponse("NOTHING FOUND")  

Но я не могу найти в моей базе данных места с долготой, содержащей 30 !!!!

Ответы [ 4 ]

2 голосов
/ 11 октября 2009

filter() возвращает набор запросов , а не отдельный элемент. Поэтому переменная, которую вы назвали place, будет не объектом Places, а набором запросов, содержащим одно или несколько мест.

Если, например, у вашего шаблона есть что-то вроде {{ place.name }}, это ничего не напечатает, потому что набор запросов не имеет атрибута name.

Предполагая, что в конечном итоге будет несколько мест с одинаковой долготой, вам нужно будет перебрать набор запросов в вашем шаблоне с помощью цикла {% for place in places %}.

0 голосов
/ 13 октября 2009

удалить 'вокруг долго в JQuery

$.post("http://127.0.0.1:8000/search/",{'long':"30"}); 

должно быть

$.post("http://127.0.0.1:8000/search/",{long:"30"});

ваш взгляд никогда не видит, что 'long' находится в запросе. совместное использование метода jquery post и django может привести к путанице, потому что структура между {} структурирована по-разному.

0 голосов
/ 12 октября 2009

DR на месте, но не хватает мелочи. Когда вы делаете этот вызов в jQuery, вы получаете один огромный недостаток: вы не можете использовать язык шаблонов Django. Когда вы пишете нормальный вид, вы делаете именно так, как объяснил DR. Однако, поскольку вы делаете это с помощью JavaScript, вам нужно сделать две вещи.

  • Поскольку вы не можете рассчитывать на автоматическое экранирование Django, вам необходимо вручную преобразовать введенные пользователем значения, такие как place.name.
  • Данные, которые вы возвращаете, должны быть возвращены в формате JSON. В этом нет особой необходимости, но вам будет намного легче обрабатывать данные в вашем javascript. Django поставляется с библиотекой simplejson, к которой вы можете обратиться, но я бы порекомендовал использовать библиотеку json, которую можно использовать для простого преобразования объектов python в json.
0 голосов
/ 12 октября 2009

Вы уверены, что даже вызываете функцию?

Я бы попробовал распечатать каждое значение, включая место. Поскольку Place.objects.filter не может вернуть None, вы должны получить какой-то набор запросов, даже если он пустой.

Честно говоря, этот код довольно глючный в целом ... Было бы полезно узнать, действительно ли Places.longtitude строка, если это строка, почему вы решили это сделать?

так как место никогда не может быть None, вы хотите проверить наличие пустого набора запросов, в этом случае вы должны написать

if not place:

Я думаю, что нам нужно больше информации, чем вы нам предоставили, чтобы помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...