Django, если тег здесь не работает - PullRequest
1 голос
/ 20 июня 2011

У меня есть приложение для блога, и я хочу показать каждое сообщение совершенно по-разному, используя классы и показывая / не показывая части, основываясь на значении внешнего ключа "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 ]

3 голосов
/ 20 июня 2011

Если 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

0 голосов
/ 20 июня 2011

Пробовали ли вы использовать двойные кавычки вместо одинарных в выражении if?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...