我正在接近完成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
答案 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))
尝试替换
Category.objects.get(id=int(cat_id))
与
{{1}}