2016-05-21 161 views
1

我要像做Django的模板 'IF' 條件

{% if "sumit" in feed.like.person.all %} 

但是這給了我TemplateSyntaxError。我怎樣才能在Djagno做到這一點?

(基本上,我想檢查 'SUMIT' 在feed.like.person.all存在)

這裏是我的相關機型。

class Feed(models.Model): 
    name = models.CharField(max_length=120) 
    text = models.CharField(max_length=1200) 
    timestamp = models.DateTimeField(auto_now=True, auto_now_add=False) 
    updated = models.DateTimeField(auto_now=False, auto_now_add=True) 


class Like(models.Model): 
    feed = models.OneToOneField(Feed) 
    counter = models.PositiveIntegerField() 
    person = models.ManyToManyField(settings.AUTH_USER_MODEL, null=True, blank=True) 
+0

這在django模板中是不可行的。它們不是爲此目的而建造的。你在模板中只有一個'feed'嗎?這只是您檢查的一個條件還是存在多個類似的情況? – AKS

+0

@AKS模板中有多個'feeds'。我試圖實現的是顯示Feed,在下面,如果我已經喜歡那個Feed,我想顯示'你喜歡這個'。 –

+0

請檢查我的答案,以獲得最佳方式。 – AKS

回答

1

您的方法通過查詢每個Feed來檢查用戶是否喜歡模板內的Feed是非常低效的。

我會建議使用Conditional Expressions標註每一個feed而獲取的查詢集:

from django.db.models import BooleanField, Case, When, Value 

feeds = Feed.objects.all().annotate(
      is_liked=Case(
       When(like__person=request.user, then=Value(True)), 
       default=Value(False), 
       output_field=BooleanField())) 

這樣,你會得到的只有一個查詢一切。而且,然後在模板你可以檢查飼料is_liked

{% if feed.is_liked %}You like this.{% endif %} 

我還沒有真正執行該查詢,但在看文檔,這將是類似的東西。

2

我想你打算檢查以下內容:

# check if current user likes a feed 
{% if request.user in feed.like.person.all %} 

但是,如果你正在檢查這多的飼料,則此方法變得效率低下。對於多個Feed,更好的方法是使用Annotations,如@AKS所述。

+0

'{%if request.user in feed.like.person.all%}'不起作用。並且網頁中有多個供稿源,對於網頁中的每個供稿源,我該如何發送我是否喜歡該帖子? –

+0

在你的context_processors設置中是''django.template.context_processors.request''。 –

+1

我不好,我原本不喜歡django-admin。它的工作現在...'{%如果用戶在feed.like.person.all%}'也可以。謝謝 ! –