如何检查Django模板中是否存在关系?

时间:2015-09-16 17:25:58

标签: django django-templates

我有一个Django项目,用户可以通过在用户和帖子本身之间创建关系来重新发布其他用户的帖子。但是当我在我的模板上显示这个时,我希望已经发布的推文在它们旁边有一个不同的链接以便重新发布但是使用我当前的设置它仍然有重新发布链接,所以我只是我想知道如何在Django模板中看到关系是否存在于条件中。

模板

            {% for tweets in combined_tweets %}
               <p>{{ tweets.userprofile.user}} | {{ tweets }} | {{ tweets.date }} |
            {% if tweets.userprofile.user == request.user %}
               <a href='{% url "delete_tweet" request.user.id tweets.id %}'>DELETE</a>
            {% elif ###Something to check if realtionship exists### %}
                UN REPOST LINK
            {% else %}
               <a href='{% url "retweet" tweets.id %}'>RETWEET</a>
            {% endif %}</p>
            {% endfor %}

models.py

class UserProfile(models.Model):
  user = models.OneToOneField(User)
  bio = models.CharField(max_length=120, blank=True, verbose_name='Biography')
  follows = models.ManyToManyField('self', related_name='followers', symmetrical=False, blank=True)
  theme = models.ImageField(upload_to=get_image_path, blank=True)
  profile_picture = models.ImageField(upload_to=get_image_path, blank=True)

def __str__(self):
    return self.bio

class Tweet(models.Model):
  userprofile = models.ForeignKey(UserProfile)
  retweet = models.ManyToManyField(UserProfile, related_name='retweet_people', symmetrical=False, blank=True)
  tweets = models.TextField(max_length=120)
  date = models.DateTimeField()

1 个答案:

答案 0 :(得分:0)

您可以使用custom template filter检查当前用户与其他用户tweets之间是否存在关系。

我们将编写一个自定义模板过滤器check_relationship_exists,它将当前用户作为参数。这将通过使用retweet对其user.id属性执行过滤器来检查当前的推文对象是否与传递的用户相关。如果存在关系,则会显示UN REPOST链接,否则会显示RETWEET链接。

from django import template
register = template.Library()

@register.filter(name='check_relationship_exists')
def check_relationship_exists(tweet_object, user):
    user_id = int(user.id) # get the user id
    return tweet_object.retweet.filter(id=user_id).exists() # check if relationship exists

然后在您的模板中,您可以执行以下操作:

{% elif tweets|check_relationship_exists:request.user %}