Django如果标签在这里不起作用

时间:2011-06-19 23:46:20

标签: django django-templates

我有一个博客应用程序,我想以一种非常不同的方式使用类和显示/不显示部分显示每个帖子,基于外键值“postype”。 这是我的代码:

{% 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类在两种情况下显示“Post”,这意味着if应该匹配。

这是我正在使用的模型

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)

由于

2 个答案:

答案 0 :(得分:3)

如果post.posttype是另一个模型的外键,则需要指定要与之比较的posttype属性

所以,如果

class PostType(models.Model):
    name = models.CharField(...)
你应该

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

目前您正在比较一个对象(posttype)和一个总是会失败的字符串(“Post”)。

div正确显示“Post”类的原因是因为当你没有指定字段时,django会自动猜测如何显示Post模型。要在没有给出属性时更改帖子的打印方式,您可以覆盖模型的 unicode 方法:

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

    def __unicode__(self):
        return self.name

这意味着当您引用此帖子类型时(如您的问题所示),将调用 unicode 方法,该方法将返回self.name

答案 1 :(得分:0)

您是否在if声明中尝试过双引号而不是单引号?