2

如何在 Django 模板中查询多多字段?

例如,这个 if 语句不起作用(我知道我不能在 Django 模板中调用带参数的函数),但这显示了我想做的事情:

模板.html

{% for post in posts %}
    {% if post.likes.filter(user=user) %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}

模型.py

class User(Model):
    # fields

class Post(Model):
    likes = ManyToManyField(User)
4

2 回答 2

3

为了做您正在寻找的东西,您可以执行以下操作:

{% for post in posts %}
    {% if user in post.likes.distinct %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}

或者,您可以使用 Greg 的方法。他的回答的优点是当你进入非常大的数据集时它会更好地扩展。这种方法不需要您编写任何自定义过滤器。

于 2012-07-04T07:37:51.827 回答
3

它不起作用,因为您似乎在模板中编写 python 代码......您需要在视图中运行循环并将帖子列表及其信息传递给模板,或者编写一个模板过滤器来确定是否某个用户喜欢一个帖子。例如:

from django import template

register = template.Library()

@register.filter
def is_liked_by(post, user):
    return bool(post.likes.filter(user=user))

然后在您的模板中:

{% for post in posts %}
    {% if post|is_liked_by:request.user %}
        You like this post
    {% else %}
        <a>Click here to like this post</a>
    {% endif %}
{% endfor %}
于 2012-07-04T01:36:25.053 回答