2011-06-19 44 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