2011-06-19 7 views
1

私はブログアプリを持っており、外部キー値 "postype"に基づいて、クラスと表示/非表示部分を使用して非常に異なる方法で各投稿を表示したい。 これは私のコードです:Djangoがここで動作しない場合

{% 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クラスは「ポストを示していても表示されていませんさ"2つの場合?"は、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が別のモデルへの外部キーである場合、あなたは

{% if post.posttype.name == "Post" %}...{% endif %} 
を持っている必要があり

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

場合はそう

と比較したいposttypeのどのような属性を指定する必要があります

オブジェクト(posttype)と文字列( "Post")を比較すると、常に失敗します。

フィールドが指定されていない場合、djangoは自動的にPostモデルの表示方法を推測しているため、divが "Post"クラスを正しく表示する理由があります。何の属性が指定されていない時にポストが印刷される方法を変更するには、モデルのユニコード方法上書きすることができます。

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

    def __unicode__(self): 
     return self.name 

をこれは、あなたが(のようにあなたの質問のように)この記事のタイプを参照するときことを意味unicodeというメソッドが呼び出され、self.nameを返します

+0

トップにForeignKeyと言ったという事実を逃しました。私は、 'def __unicode __(self):'ではなく、直接のパス(post.postype.name)を使用して、将来何かが変化するようにします。 – tlunter

+0

post.postype.postypeそれをしました、それは、私がモデルに持っていて、それは魅力のように働いていました。ありがとうございました。 – ramono

+0

私はあなたの答えを再読しました。これは実際に私が理解するのを助ける答えのタイプです。私はデザイナーであり、プログラマーではありません。あなたの時間をありがとう。 – ramono

0

あなたはif文の中で二重引用符の代わりに単一引用符を試みたことがありますか?

+0

はい、私はそれを前に試しましたが、実際に@pastylegsが言ったことでした。ありがとうございました:) – ramono

関連する問題