开发者

Django if tag doesn't work here

I have a blog app and i want to show each post in a very different way using classes and showing/not-showing parts, based in a foreign key value "postype". This is my code:

{% 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 %}

And the result of that is:

<div class="Post">
    Title Post One
</div>
<div class="News开发者_如何学运维">
    Title Post Two
</div>
<div class="Post">
    Title Post Three
</div>

So my question is, why the "post.created" is not showing even though the div class shows "Post" in two cases?, which means the if should match.

This is the model i'm using

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)

Thanks


If post.posttype is a foreign key to another model, you need to specify what attribute of posttype you want to compare against

so if

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

you should have

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

As it stands you are comparing an object (posttype) to a string ("Post") which will always fail.

The reason the div shows the class "Post" correctly, is because django is automatically guessing how to display the Post model when you don't specify a field. To change the way a post is printed when no attribute is given, you can overwrite the unicode method of the model:

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

    def __unicode__(self):
        return self.name

This means that when you reference this post type (like in your question as ) the unicode method is called which returns self.name


Have you tried double quotes instead of single quotes in the if statement?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜