Форум сайта python.su
здравствуйте.
есть модель. через которую загружаются картинки в папку в админке.
в шаблон выводится две картинки из БД.
пользователь выбирает понравившуюся, нажимает на неё. аяксом отправляется данные, вьюха должна обработать полученные данные и выдать новую порцию картинки.
вот что я имею сейчас
urls.py
from django.conf.urls import patterns, include, url urlpatterns = patterns('carreiting.views', (r'^$', 'home'), (r'ajax_save_reiting_update/(\w+)$', 'ajax_save_reiting_update') )
# coding: utf-8 from django.shortcuts import render_to_response from django.http import HttpResponse import random from models import Cars def home(request): # получаем список всех картинок images = Cars.objects.all() # берем рандомно два изображения a = random.randint(0, len(images)-1) b = random.randint(0, len(images)-1) while a == b: b = random.randint(0, len(images)-1) return render_to_response( 'base.html', { 'image1': images[a], 'image2': images[b] }) def ajax_save_reiting_update(request, images): print images # получаем список всех картинок images = Cars.objects.all() # берем рандомно два изображения a = random.randint(0, len(images)-1) b = random.randint(0, len(images)-1) while a == b: b = random.randint(0, len(images)-1) return HttpResponse(images[a].name.name+'|'+images[b].name.name)
from django.db import models from django.contrib import admin # Create your models here. class Cars(models.Model): name = models.FileField(upload_to = 'static\\cars\\') reiting = models.CharField( max_length = 100, default = '0', editable = False) def __unicode__(self): return self.name.name admin.site.register(Cars)
<!DOCTYPE HTML> <html> <head> <meta charset = 'utf-8'> <title>Система рейтингов автомобилей</title> <link rel = "stylesheet" type = "text/css" href = "/static/styles.css"> <script language = 'javascript'> function getXmlHttpRequest() { if (window.XMLHttpRequest) { try { return new XMLHttpRequest(); } catch (e) {} } else if (window.ActiveXobject) { try { return new ActiveXobject('Msxml2.XMLHTTP'); } catch (e) {} try { return new ActiveXobject('Microsoft.XMLHTTP'); } catch (e) {} } return null } function getNextImages(selected_image) { image1 = document.getElementById('image1'); image2 = document.getElementById('image2'); document.getElementById('ajax_status').innerText = image1.src; // создаем запрос request = getXmlHttpRequest(); // создаем обрабочтк события request.onreadystatechange = function() { if (request.readyState == 4) { src = request.responseText.split('|'); image1.src = src[0]; image2.src = src[1]; } } if (selected_image == 1) request.open('GET', 'ajax_save_reiting_update/'+image1.src+'|'+image2.src, false); else request.open('GET', 'ajax_save_reiting_update/'+image2.src+'|'+image1.src, false); request.send('123'); } </script> </head> <body> <h1>Какой автомобиль вам по душе?</h1> <hr> <img id = 'image1' src = {{image1}} onClick = 'getNextImages(1);'> <img id = 'image2' src = {{image2}} onClick = 'getNextImages(2);'> <hr> <input type = 'button' value = 'Тест' onClick='getNextImages(1);'> <span id = 'ajax_status'>Статус ajax запроса</span> </body> </html>
Офлайн
Жуть.
Я бы лично сделал так:
а) отдавал бы объекты в шаблон строкой вида
result = [images1, images2]
{% for item in result %} <img id = 'image{{ item.pk }}' src = {{ item }} onClick = 'getNextImages({{ item.pk }});'> {% endfor %}
reiting_img = Car.objects.get(pk=int(request.REQUEST['img_id']))
function getNextImages(id){ $.post( {% url ''ajax_raiting %}, {img_id: id} , function(data) { if (data.success) { $("img_result").html(data.html); } }); return false; }
def ajax_save_reiting_update(request): # Получаем IDшник выбранной картинки из ПОСТ и ищем объект reiting_img = Car.objects.get(pk=int(request.REQUEST['img_id'])) # и делаем с ним что-нибудь нужное # тут все эти ваши рейтингования и новая выборка result = [images[a], images[b]] html = render_to_string('imgblock.html ', {'item': result}) payload = {'success': True, 'html': html} return HttpResponse(json.dumps(payload, cls=LazyEncoder), content_type='application/json')
Отредактировано nnmware (Март 13, 2013 15:30:18)
Офлайн
спасибо. за вечер многое поправил
Офлайн
Да не за что.
я там с кавычками в урле проперся в JS-куске.
конечно не url ‘'ajax_raiting а url ’ajax_raiting'
Офлайн