【问题标题】:Tango with Django: Creating a "Like" buttonTango with Django:创建一个“喜欢”按钮
【发布时间】: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 教程中的一个错字,可能是由于更新了各种版本造成的。

标签: jquery python html django


【解决方案1】:

data-catid 只是一个分配给给定 HTML 标记的属性,类似于任何其他值属性对,例如 id, class, title, etc.

关于使用 jQuery 设置属性的想法的进一步解释可以找到here

编辑

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 %} 

编辑 2

尝试替换

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

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

【讨论】:

  • 好的,这样说得通了 - 关于为什么按钮不能按预期运行的任何想法?
  • 已添加到原始帖子 - 感谢您抽出宝贵时间@aus_lacy!
  • 模型看不到任何错误。您是否在模板中包含您的 rango-ajax.js 脚本?
  • 我想知道我是不是搞砸了。我在
猜你喜欢
  • 2012-09-26
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2020-11-30
  • 1970-01-01
  • 2020-11-04
  • 2016-04-04
相关资源
最近更新 更多