Python 喜欢使用自定义模板标记切换
我想里面的文字按钮之间切换喜欢和不喜欢。我试图实现这一点使用自定义模板标签。“喜欢”和“不喜欢”正在起作用,模型正在更新。只想按钮之间切换喜欢和不喜欢 我已经创建了template tags文件夹。只需要帮助在post_extras.py中创建template tag函数,以及如何在模板中调用该函数 邮政附加费Python 喜欢使用自定义模板标记切换,python,django,Python,Django,我想里面的文字按钮之间切换喜欢和不喜欢。我试图实现这一点使用自定义模板标签。“喜欢”和“不喜欢”正在起作用,模型正在更新。只想按钮之间切换喜欢和不喜欢 我已经创建了template tags文件夹。只需要帮助在post_extras.py中创建template tag函数,以及如何在模板中调用该函数 邮政附加费 from django import template register = template.Library() @register.simple_tag
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def isliked(context,entry):
if entry.filter(id=context['request'].post.id).exists():
return "Unlike"
else:
return "Like"
像_section.html
{% load post_extras %}
{{ entry.total_likes }} Like{{ entry.total_likes | pluralize }}
<form action="{% url 'like_post' %}" method="POST">
{% csrf_token %}
<input type="submit" name="{{ entry.id }}" value="like" class="btn
btn-primary like"/>
</form>
ajax代码:
$(document).on('click','.like',function(e) {
e.preventDefault();
var pks=$(this).attr('name');
console.log('primarys : '+ pks);
$.ajax({
type:'POST',
url:'like/',
data:{
'ids': pks,
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
},
success:function (response) {
$(e.target).parents('.like-section').html(response);
console.log(response)
console.log("liked");
},
error: function(rs,e){
console.log(rs, e.responseText);
console.log('ERROR');
},
});
});
views.py
def like_post(请求):
根据我的理解,如果帖子存在于
Like
模型中,那么它就是Like
解决方案:
from django import template
# import `Like` model
from path.to.models import Like
register = template.Library()
@register.simple_tag
def isliked(post):
if Like.objects.filter(post=post).exists():
return "Like"
return "Unlike"
然后可以将其加载到模板中:{%load isliked%}
然后,通过传递一个
Post
model:{%isliked Post%}
的实例来使用它,您可以这样调用Django模板中的自定义标记:{%isliked%}
我的函数没有正确完成。您能想出如何编写function@petr我的函数做得不对。你知道怎么写函数吗?(isliked)您传递的参数如下:{%isliked entry%}
现在可以工作了吗?@petr否。不工作。请注意,我使用另一个like表来管理like。我编写的函数是错误的,它似乎在/home/get()返回了多个like——它返回了4!。。我应该做user=requerst['context']吗?如果Like不存在,它应该返回“Like”,否则返回“nothing”。我想它在你的代码中是倒过来的?谢谢。我发现问题是很多用户可以喜欢很多帖子。喜欢帖子的用户应该只能不喜欢它。
from django import template
from posts.models import Like
register = template.Library()
@register.simple_tag(takes_context=True)
def isliked(context, post):
try:
obj = Like.objects.get(post=post,user=context['request'].user)
return "Unlike"
except Like.DoesNotExist:
return "Like"
from django import template
# import `Like` model
from path.to.models import Like
register = template.Library()
@register.simple_tag
def isliked(post):
if Like.objects.filter(post=post).exists():
return "Like"
return "Unlike"
from django import template
from posts.models import Like
register = template.Library()
@register.simple_tag(takes_context=True)
def isliked(context, post):
try:
obj = Like.objects.get(post=post,user=context['request'].user)
return "Unlike"
except Like.DoesNotExist:
return "Like"