Python 如何在模板中基于django中的选择字段进行排序

Python 如何在模板中基于django中的选择字段进行排序,python,django,Python,Django,考虑以下模型: class Category(models.Model): name = models.CharField(max_length=100) description = models.TextField() POSITIONS = ( ('L', 'Left'), ('R', 'Right') ) position = models.CharField(max_length=1, cho

考虑以下模型:

class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    POSITIONS = (
            ('L', 'Left'),
            ('R', 'Right')
        )
    position = models.CharField(max_length=1, choices=POSITIONS, default='R')
    class Meta:
        verbose_name_plural = 'categories'
    def __str__(self):
        return self.name
我想对对象进行排序,这样我就可以将左对象和右对象分开,并在html文档的不同部分中显示它们。比如:

{% for category in categories|sort_by: "position" = "left" %}
        <ul class="collection with-header">
         <li class="collection-header">
          <h3>{{category.name}}</h3>
             <p><small>{{category.description}}</small></p>
         </li>
            {% for url in category.extra_link_set.all %}
            <li class="collection-item"><a href="{{url.url}}">{{url.url_text}}</a></li>
            {% endfor %}

        </ul>
        {% endfor %}

我知道这行不通。但我只是想告诉你我想要什么。对于django模型中的任何其他字段类型,该过程也会类似吗?

您可以尝试以下方法:

{% for category in categories %}
    <div class="left_stuff">
        {% if category.position=='L' %}
            <h3>...</h3>
            .....
        {% endif %}
    </div>
{% endfor %}

{% for category in categories %}
    <div class="right_stuff">
        {% if category.position=='R' %}
            <h3>...</h3>
            .....
        {% endif %}
    </div>
{% endfor %}

你想要的不是排序,而是把左右分开。您可以在循环中使用一个简单的if来实现这一点。您可以通过参数化if语句并将共享代码提取到包含的单独模板中来进一步简化这一点。