我有一个博客应用程序,我想以一种非常不同的方式使用类和显示/不显示部分显示每个帖子,基于外键值“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)
由于
答案 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
声明中尝试过双引号而不是单引号?