每周在Django中显示一组不同的对象

wooyq4lh  于 2023-06-25  发布在  Go
关注(0)|答案(2)|浏览(132)

所以基本上我有一个有16个对象的表。我想在我的网站上只显示其中的四个,并希望它每周自动旋转到另外四个等等。我在想,也许一个cronjob会做到这一点,但我宁愿问这里之前,我采取任何行动。
这里是我的models.py

class Liturgicketexty(models.Model):
    id = models.AutoField(primary_key=True)
    text = models.CharField(max_length=45)
    url = models.URLField(max_length=200, blank=True, null=True)

    class Meta:
        verbose_name_plural = 'Liturgické texty'

    def __str__(self):
        return self.text

这是我使用这个表格的HTML部分。

<div id="table">
                    <table>
                        <thead>
                            <tr>
                                <th>Čtení na neděli</th>
                            </tr>
                        </thead>
                        <tbody>
                            {% for l in liturgicketexty %}
                            <tr>
                                <td><a href="{{ l.url }}">{{ l.text }}</a></td>
                            </tr>
                            {% endfor %}

                        </tbody>
                    </table>
</div>

如果有人需要的话。
我说过了我试图研究一些解决办法,但没有发现任何有希望的。如果你发现或知道什么,我将不胜感激。

c7rzv4ha

c7rzv4ha1#

下面是一个每周选择4个不同对象的视图示例。四周后,它会返回显示前4个对象,依此类推。

def exampleView(request):
    # gets a number between 0 and 4, based on the current week
    week_group = int(datetime.now().strftime("%W")) % 4
    # chooses 4 objects using the previous number
    this_weeks_objects = Liturgicketexty.objects.all()[4*week_group:4*(week_group+1)+1]
    # add the objects to the context
    context = {"liturgicketexty": this_weeks_objects }
    # renders your template, which doesn't need to be modified.
    return render(request, "your_template.html", context)

datetime.now().strftime("%W")返回当前周的数字(更多细节here)。

esbemjvw

esbemjvw2#

最好是使用cron job。根据我的经验,视图中的任何代码只有在有人访问该视图时才会执行,而且,在视图函数中进行这样的计算不是一个好主意。例如,如果您的网站在该视图上每天有1000个访问者,这意味着您将仅在该视图上进行该数量的计算,并且如果您选择将当前周存储在数据库中,则还必须在每次调用或访问时更新DB
但是如果你使用cron作业,你每周只更新一次视图。

相关问题