首页 > 解决方案 > Django:如何创建对象字典并在模板中显示

问题描述

嘿,我看过类似的问题,但没有一个与我正在尝试做的事情真正相关,它们要么解释了如何在管理面板中排序,要么只是简单地遍历对象字典。

我创建了一个包含值 gallery_order 的基本照片模型,因此我可以在管理员中对其进行编辑。

我希望根据 gallery_order 值从 1 向上的顺序用图片填充我的模板。

我想最好的处理方法是用字典,但我不知道在哪里初始化它,如果我把它放在图片模型中,那么每张图片都包含一个包含所有图片订单号和 url 的字典,这看起来很精神。

我目前的型号:

class Picture(models.Model):
    title = models.CharField(max_length=36, blank=False, unique=True)
    gallery_order = models.IntegerField(default=0)
    image = models.ImageField(upload_to='photos/', blank=False)

    def __str__(self):
        return self.title

我的模板代码:

<head>
    <meta charset="utf-8">
    {% block content %}
    <div class="row">
        {% if pictures %}
            {% for picture in pictures %}
                <div class="col-md-12">
                    <div class="card mb-0">
                        <img class="card-img-top" src="{{ picture.image.url }}">
                    </div>
                </div>
            {% endfor %}
        {% endif %}
    </div>
    {% endblock content %}
</head>

我的管理员代码:

@admin.register(Picture)
class PictureAdmin(admin.ModelAdmin):
    list_display = ('gallery_order', 'title', 'image')
    list_display_links = ['gallery_order']
    search_fields = ['title']

    def get_queryset(self, request):
        queryset = super(PictureAdmin, self).get_queryset(request)
        queryset = queryset.order_by('gallery_order')
        return queryset

我试图通过查看 psotgres db 中的 PK 来弄清楚 django 是如何显示它们的,但它似乎只是根据上次编辑的显示它们。

谢谢你 :)

标签: pythondjangodictionarytemplates

解决方案


我很傻,有时我忘记了我的观点!

看在上帝的份上,我所要做的就是指定 order_by ......

class Home(View):

    pictures = Picture.objects.all().order_by('gallery_order')

    def get(self, request):
        return render(request, 'home.html', {'pictures': self.pictures})

推荐阅读