Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 喜欢使用自定义模板标记切换_Python_Django - Fatal编程技术网

Python 喜欢使用自定义模板标记切换

Python 喜欢使用自定义模板标记切换,python,django,Python,Django,我想里面的文字按钮之间切换喜欢和不喜欢。我试图实现这一点使用自定义模板标签。“喜欢”和“不喜欢”正在起作用,模型正在更新。只想按钮之间切换喜欢和不喜欢 我已经创建了template tags文件夹。只需要帮助在post_extras.py中创建template tag函数,以及如何在模板中调用该函数 邮政附加费 from django import template register = template.Library() @register.simple_tag

我想里面的文字按钮之间切换喜欢和不喜欢。我试图实现这一点使用自定义模板标签。“喜欢”和“不喜欢”正在起作用,模型正在更新。只想按钮之间切换喜欢和不喜欢

我已经创建了template tags文件夹。只需要帮助在post_extras.py中创建template 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"