我该如何在模板中添加类别?

时间:2017-08-16 13:19:08

标签: python django

型号:

             total       used       free     shared    buffers     cached
Mem:         23922      23348        573       2993       2899      13761
-/+ buffers/cache:       6687      17234
Swap:         7999       1033       6966

查看:

class Category(models.Model):
    name = models.CharField(max_length=20)
    slug = models.SlugField(max_length=200, unique=True )

    def __unicode__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length = 100) 
    content = models.TextField(max_length = 600, default = 'cool' )
    date_of_creating =   models.DateTimeField(auto_now=False, auto_now_add=True)
    image = models.ImageField(
        upload_to=upload_location,
        null=True, 
        blank=True, 
        height_field="height_field", 
        width_field="width_field"
        )
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0) 
    category = models.ForeignKey('Category')
    slug = models.SlugField(unique=True, blank=False)


    def __unicode__(self):
        return self.title

我不知道我应该在模板中写什么来按类别过滤我的帖子。 我需要选择类别并显示此类别的帖子。如何按类别过滤?

2 个答案:

答案 0 :(得分:1)

我相信您在询问如何按类别排列显示您的帖子?如果这就是你所追求的,你的模板应该是这样的:

template.html

{% if category %}
{% if post %}
    {% for c in category %}
        {% for p in post %}
            {% if p.category == c %}
                <div>{{ p.title }}</div> <!-- and whatever else you want to display and however you want to style it I am just giving an example -->
            {% endif %}
        {% endfor %}
    {% endfor %}
{% endif %}
{% endif %}

根据您在视图中执行的操作,这是按类别显示的一种方法。请注意,有更好的方法可以遍历数据并对其进行分组,但是您要求这样做。所以我希望这会帮助你!

编辑1

再次阅读你的问题后(​​我相信有一个编辑)我看到你问的是如何显示所选类别的帖子。我假设,因为您有一个slug所选的类别在URL中。所以在视图中确实选择了正确的posts。因此,为了显示所选category的帖子,您只需在模板中执行此操作:

{% if post %}
    {% for p in post %}
        <div>{{ p.title }}</div> <!-- and whatever else you want to display and however you want to style it I am just giving an example -->
    {% endfor %}
{% endif %}

希望这有帮助!

答案 1 :(得分:1)

您可以尝试使用Ajax按类别(Tutorial here)进行过滤。

创建一个包含所有类别的选择框,然后在选择新选项时,触发Ajax查询以选择该类别中的所有帖子。