2011-06-19 46 views
1

我有一個博客應用程序,我想以一種非常不同的方式顯示每個帖子,使用類和顯示/不顯示部分,基於外鍵值「postype」。 這是我的代碼:Django if tag does not work here

{% for post in posts.object_list %} 
    <div class="{{ post.postype }}"> 
     <h4>{{ post.title }}</h4> 
     {% if post.postype == 'Post' %}<p>{{ post.created }}</p>{% endif %} 
    </div> 
{% endfor %} 

的,這個結果是:

<div class="Post"> 
    Title Post One 
</div> 
<div class="News"> 
    Title Post Two 
</div> 
<div class="Post"> 
    Title Post Three 
</div> 

所以我的問題是,爲什麼「post.created」無法顯示,即使在div類顯示「後「在兩種情況下,這意味着如果應該匹配。

這是模型我使用

class Postype(models.Model): 
    postype = models.CharField(max_length=32) 

    def __unicode__(self): 
     return self.postype 

class Post(models.Model): 
    author = models.ForeignKey(User) 
    postype = models.ForeignKey(Postype) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    title = models.CharField(max_length=100) 
    slug = models.SlugField() 
    text = models.TextField() 
    allow_comments = models.BooleanField(db_index=True, default=True) 
    published = models.BooleanField(db_index=True, default=True) 

    objects = PostManager() 

    def __unicode__(self): 
    return u"%s - %s" % (self.title, self.created) 

    def save(self, *args, **kwargs): 
     self.slug = slughifi(self.title) 
     super(Post, self).save(*args, **kwargs) 

感謝

+0

你可以顯示什麼模型正在使用? –

回答

3

如果post.posttype是一個外鍵到另一種模式,你需要指定你想要的屬性posttype的來比較

所以如果

class PostType(models.Model): 
    name = models.CharField(...) 

你應該有

{% if post.posttype.name == "Post" %}...{% endif %} 

就目前而言,您正在將一個對象(posttype)與一個始終失敗的字符串(「Post」)進行比較。

div正確顯示「Post」類的原因是因爲當您不指定字段時,django會自動猜測如何顯示Post模型。要更改時沒有給出屬性後打印的方式,可以覆蓋模型的統一方法:

class PostType(models.Model): 
    name = models.CharField(...) 

    def __unicode__(self): 
     return self.name 

這意味着,當你(在你的問題等)引用這篇文章類型unicode方法被調用返回self.name

+0

錯過了它在頂部說ForeignKey的事實。我會使用直接路徑(post.postype.name)而不是'def __unicode __(self):'在未來發生一些變化。 – tlunter

+0

post.postype.postype做到了這一點,這是我在模型中的樣子,它像魅力一樣工作。謝謝。 – ramono

+0

我重新閱讀你的答案,這實際上是真正幫助我理解的答案類型,我是設計師,而不是程序員。感謝您的時間。 – ramono

0

您是否嘗試過雙引號代替單引號在if聲明?

+0

是的,我曾嘗試過,但它實際上是@pastylegs說的。謝謝:) – ramono