【发布时间】:2014-12-18 20:16:47
【问题描述】:
我即将完成 Tango with Django 教程,我即将完成,正在制作一个“喜欢”按钮:
http://www.tangowithdjango.com/book17/chapters/ajax.html#add-a-like-button
应该发生的事情是:
当点击按钮时,根据我们的 url 发出 AJAX 请求 映射,这会调用 like_category 视图来更新 类别并返回新的点赞数。 AJAX 请求时 接收它更新页面部分的响应,即文本和 按钮。 #likes 按钮已隐藏。
我的按钮在那里,可以点击,但是点击后没有隐藏,也没有实际增加点赞数,不知道为什么,我在上一章介绍中成功创建了按钮。
这些是相关的代码 sn-ps(但如果我遗漏了一些可能有用的东西,请告诉我:
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 了解不多,但我想知道我的 category.html 文件的 data-catid 部分是否不正确(尽管教程中是这样的)。我质疑它只是因为notepad ++不会像它为'id'或'class'所做的那样为该属性着色。有人想吗?
干杯, 保罗
编辑:
这是我单击“赞”按钮时控制台显示的内容:
[19/Dec/2014 09:44:20] "GET /rango/like_category/?category_id=1 HTTP/1.1" 500 11493
【问题讨论】:
-
控制台错误是来自 Python 控制台还是浏览器控制台?另外,请检查我的第二次编辑。
-
你是个野兽!非常感谢您的帮助 aus_lacy,非常感谢您花时间在这里,第二次编辑就是解决方案!
-
没问题,很高兴为您提供帮助。我认为这是 Tango with Django 教程中的一个错字,可能是由于更新了各种版本造成的。