我一直无法将这种视图转换为Ajax调用:
def company_single(request, slug):
company = get_object_or_404(CompanyProfile, slug=slug)
company_list = CompanyProfile.objects.get(slug=slug)
try:
tcompany = CompanyLikes.objects.get(company=company_list)
total_likes = tcompany.likes
user_liked = CompanyLikes.objects.get(user=request.user)
except:
total_likes = 0
instance, created = CompanyLikes.objects.get_or_create(company=company_list)
likes_form = CompanyLikesForm(request.POST or None, instance=instance)
if likes_form.is_valid():
this = likes_form.save(commit=False)
try:
if user_liked:
this.likes -=1
this.user.remove(request.user)
except:
this.user.add(request.user)
this.likes += 1
this.save()
return render_to_response('company.html', locals(), context_instance=RequestContext(request))
我认为我需要jQuery和JSON,但是我不确定如何在此处实现它以便为自己的网站创建自己的“赞按钮”。有什么想法/建议吗?
我举一个例子。你只需从中学习并进行相应的更改。
myapp.models.py(简化的公司模型):
from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify
class Company(models.Model):
name = models.CharField(max_length=255)
slug = models.SlugField()
likes = models.ManyToManyField(User, related_name='likes')
@property
def total_likes(self):
"""
Likes for the company
:return: Integer: Likes for the company
"""
return self.likes.count()
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Company, self).save(*args, **kwargs)
myapp.urls.py(视图的URL):
url(r'^like/$', 'myapp.views.like', name='like'),
myapp.views.py(查看):
from django.http import HttpResponse
try:
from django.utils import simplejson as json
except ImportError:
import json
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_POST
from myapp.models import Company
@login_required
@require_POST
def like(request):
if request.method == 'POST':
user = request.user
slug = request.POST.get('slug', None)
company = get_object_or_404(Company, slug=slug)
if company.likes.filter(id=user.id).exists():
# user has already liked this company
# remove like/user
company.likes.remove(user)
message = 'You disliked this'
else:
# add a new like for a company
company.likes.add(user)
message = 'You liked this'
ctx = {'likes_count': company.total_likes, 'message': message}
# use mimetype instead of content_type if django < 5
return HttpResponse(json.dumps(ctx), content_type='application/json')
模板:
<input type="button" id="like" name="{{ company_slug }}" value="Like" />
<script>
$('#like').click(function(){
$.ajax({
type: "POST",
url: "{% url 'like' %}",
data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: "json",
success: function(response) {
alert(response.message);
alert('Company likes count is now ' + response.likes_count);
},
error: function(rs, e) {
alert(rs.responseText);
}
});
})
</script>
在模板中使用url标签的一些说明:
Django < 1.3
使用url
不带引号的标签{% url like %}
Django > 1.3 and < 1.5
这样,你应该添加{% load url from future %} at top level of your template and enclosed your URL name with quotes as I have done in my answer
Django >= 1.5
话,只需删除{% load url from future %}
并用引号括起来的URL名称{% load url from future %}
标记为已弃用,并将在Django 1.9
问题内容: 我想通过AJAX发送登录数据来对用户进行身份验证,但是由于CSRF,这是不可能的。您能否告诉我要添加到代码中以使其正常工作的内容? 我的JavaScript文件: 问题答案: 这里介绍一种方法。 它包括在每个ajax请求上添加X-CSRFToken标头。 这是通过挂钩jQuery.ajaxSend事件来完成的,因此所有操作都是自动完成的(您只需复制并粘贴其代码,并在发出第一个ajax请
主要内容:使用Django-dajaxAjax基本上是集成到一起,以减少页负载数量的技术的组合。我们通常使用Ajax来缓解的最终用户体验。在Django使用Ajax可以直接使用Ajax库如jQuery或其它来完成。比方说,想使用jQuery,那么你需要下载并服务于库服务器通过Apache或其他服务器。然后用它在模板,就像开发一个基于Ajax的应用程序。 Django使用 Ajax 另一种方法是使用Django的Ajax框架。 最常用的
问题内容: 这可能是基本的,但是我花了两天时间,阅读了无数教程,但仍然无法正常工作。为简单起见,我尝试完成一项基本任务只是为了看它能起作用。我想向我的捐赠视图发送一个ajax调用。我看到它成功通过,但是我期望我的模板也将更新为“ TRUE”,但仍为“ FALSE”。我有任何帮助或建议。 我的jQuery … 这是我的看法 我的模板包括这个… 更新/解决方案 就像在此问题的评论中提到的那样,我没有对
问题内容: 我正在尝试在Django中使用jQuery / AJAX发布数据,并且遇到了麻烦。当我运行下面的代码并单击“测试”按钮时,整个页面将再次重新加载,这不是我想要的(这就是我使用AJAX的原因)。 我也无法确认AJAX请求正在进入Django视图。 编辑:我对return false和进行了编辑。无法加载新页面,但仍无法在该字段中看到更新的文本。我不确定是否正在发送数据。我在控制台中看到:
问题内容: 因此,我一直无法将这种视图转换为Ajax调用: 我想我需要jQuery和JSON,但是我不确定如何在此处实现它以便为我的网站创建自己的“赞按钮”。有什么想法/建议吗? 问题答案: 我举一个例子。您只需从中学习并进行相应的更改。 myapp.models.py (简化的公司模型): myapp.urls.py (视图的URL): myapp.views.py (查看): 模板: 在模板中
问题内容: 我已经检查了很多有关django AJAX表单的教程,但是每个教程都告诉您一种实现方法,它们都不是简单的,而且由于我从未使用过AJAX,所以我有点困惑。 我有一个名为“ note”的模型,它的模型形式,并且在模板内,我需要每次note元素发送stop()信号(来自jQuery Sortables)时django更新对象。 我当前的代码: views.py JavaScript: 当前代