2014-12-18 3 views
0

Я близится к завершению танго с Django учебник, я рядом финишную прямую, в процессе создания «как» кнопка:танго с Джанго: Создание «Как» кнопка

http://www.tangowithdjango.com/book17/chapters/ajax.html#add-a-like-button

Что должно случиться:

при нажатии на кнопку запрос AJAX сделан, учитывая наше отображение URL , это вызывает вид like_category, который обновляет категорию и возвращает новое число подобных. Когда запрос AJAX получает ответ, он обновляет части страницы, то есть текст и кнопку. Кнопка #likes скрыта.

Моя кнопка есть, может быть нажата, но не скрывает, после того, как щелкнул, и не фактические приращение числа подобных, и я не знаю, почему, я успешно создал кнопки в предыдущей вводной главе ,

Эти соответствующие фрагменты кода (но дайте мне знать, если есть что-то, что я пропустил, который мог бы быть полезным:

views.py 

@login_required 
def like_category(request): 

    cat_id = None 
    if request.method == 'GET': 
     cat_id = request.GET['category_id'] 

    likes = 0 
    if cat_id: 
     cat = Cat.objects.get(id=int(cat_id)) 
     if cat: 
      likes = cat.likes + 1 
      cat.likes = likes 
      cat.save() 

    return HttpResponse(likes) 

rango-ajax.js 

$('#likes').click(function(){ 
    var catid; 
    catid = $(this).attr("data-catid"); 
    $.get('/rango/like_category/', {category_id: catid}, function(data){ 
       $('#like_count').html(data); 
       $('#likes').hide(); 
    }); 
}); 

category.html 

<p> 

<strong id="like_count">{{ category.likes }}</strong> people like this category 

{% if user.is_authenticated %} 
    <button id="likes" data-catid="{{ category.id }}" class="btn btn-primary" type="button"> 
    <span class="glyphicon glyphicon-thumbs-up"></span> 
    Like 
    </button> 
{% endif %} 

</p> 

models.py 

from django.db import models 
from django.template.defaultfilters import slugify 
from django.contrib.auth.models import User 

class Category(models.Model): 
     name = models.CharField(max_length=128, unique=True) 
     views = models.IntegerField(default=0) 
     likes = models.IntegerField(default=0) 
     slug = models.SlugField(unique=True) 

     def save(self, *args, **kwargs): 
       self.slug = slugify(self.name) 
       super(Category, self).save(*args, **kwargs) 

     def __unicode__(self): 
       return self.name 

Я не знаю много о html или javascript/jquery, но мне интересно, неверна ли часть data-catid моего файла category.html (хотя это так, как описано в учебнике). Я спрашиваю об этом просто потому, что notepad ++ не окрашивает этот атрибут так, как это делается для «id» или «class». Мысли кто-нибудь?

Приветствия, Пол

EDIT:

Это то, что моя консоль показывает мне, когда я нажимаю на кнопку, как:

[19/Dec/2014 09:44:20] "GET /rango/like_category/?category_id=1 HTTP/1.1" 500 11493 
+0

ли ошибка консоли с консоли Python или консоли браузера? Также проверьте мое второе редактирование. –

+0

Ты зверь! Большое спасибо за вашу помощь aus_lacy, я ценю то время, которое вы здесь сделали, что второе редактирование было решением! – ploo

+0

Без проблем, рад помочь. Я считаю, что это опечатка в Tango с учебником Django, вероятно, вызванная обновлением различных версий. –

ответ

1

data-catid это просто атрибут, который присваивается данный тег HTML, аналогичный любой другой паре атрибутов значений, такой как id, class, title, etc..

Дополнительное объяснение идеи установки атрибутов с помощью jQuery можно найти here.

EDIT

Django требует, чтобы загрузить статические файлы на шаблон с помощью шаблона основы. В вашем category.html я предполагаю, что у вас есть {% extends base.html %}, но прямо под этим вам нужно {% load static %}, а затем вы можете ссылаться на свой сценарий ajax.

Пример category.html ниже:

{% extends 'base.html' %} 
{% load static %} 
{% block body_block %} 
    <!-- Your template html here --> 
    <script type="text/javascript" src="{% static 'js/rango-ajax.js' %}"></script> 
{% endblock %} 

Edit 2

Попробуйте заменить

Cat.objects.get(id=int(cat_id)) 

с

Category.objects.get(id=int(cat_id)) 
+0

Хорошо, так что имеет смысл - любые мысли о том, почему кнопка не будет функционировать так, как ожидалось? – ploo

+0

можете ли вы включить свой код для модели категории? –

+0

Добавлено в оригинальное сообщение - спасибо, что нашли время здесь @aus_lacy! – ploo

Смежные вопросы