Tango与Django:创建一个“赞”按钮

时间:2014-12-18 20:16:48

标签: jquery python html django

我正在接近完成Tango与Django教程,我在家附近,正在制作一个类似于'按钮:

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

应该发生的事情是:

  

单击按钮时,会根据我们的URL发出AJAX请求   映射,这会调用更新的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知之甚少,但我想知道我的category.html文件的data-catid部分是否不正确(即使这是教程中的内容)。我之所以对它提出质疑,是因为记事本++没有按照它对“id”的方式对该属性进行着色。或者&#39; class&#39;。有谁想?

干杯, 保罗

编辑:

当我点击“赞”按钮时,这是我的控制台显示的内容:

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

1 个答案:

答案 0 :(得分:2)

data-catid只是一个分配给给定HTML代码的属性,类似于 id, class, title, etc.等任何其他值属性对。

可以找到有关使用jQuery设置属性的想法的进一步说明{。{3}}。

修改

Django要求您逐个模板地在模板上加载静态文件。在category.html我假设您有{% extends base.html %},但直接在{% load static %}之下,您需要category.html然后您可以引用您的ajax脚本。

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

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

编辑2

尝试替换

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

{{1}}