Django项目立即显示已处理的数据

时间:2018-10-30 03:25:00

标签: python django

我有一个Django项目。它在view.py中具有一个功能,可以处理输入中的数据,从而为其他功能提供输出。但是,该功能的处理时间很长。我想完成处理后输出的即时演示。我怎么能做到?以下processing()函数用于处理目的。输出“ user_entries”用于在results()中进行演示,如下所示。

def processing(request):
    import sys
    n = []
    for topic in Topic.objects.filter(owner=request.user).order_by("date_added"):
        entries = topic.entries.all()
        m = []
        for p in entries:
            q = p.text
            m.append(q)
        n.append(m)
    list = []
    start(list, n)
    request.session['user_entries'] = list
    return request.session['user_entries']

def results(request):
    data = processing(request)
    return render(request, "project/results.html", {"datas": data})

在processing()函数的start()函数中。有一部分list.append()将新输出添加到列表中。但是似乎新的附加列表无法传输,并无法在project / results.html中显示即时结果?

1 个答案:

答案 0 :(得分:1)

您正在做的事情可能要简单得多。

def results(request):
    return render(
        request, 
        "project/results.html", 
        {
            "user_entries": Entry.objects.filter(topic__owner=request.user),
            "start_values": "...", # Whatever start is appending...
        },
    )

由于您具有从输入到用户的外键,因此您也可以使用request.user.topic_set.all()来获取当前用户的主题。

或者,如果您确实需要嵌套这些列表...

            # ...
            "user_entries": (
                topic.entries.all() for topic in
                Topic.objects.filter(owner=request.user)
            ),
            # ...

仅基于您显示给我们的内容,看来您的订购(包括主题和条目)应该设置了合理的默认值,例如Topic.Meta.ordering,在这种情况下,看起来像这样:

class Topic(models.Model):
    # ...
    class Meta:
        ordering = ("date_added",)
    # ...

这样,在这种情况下以及大多数其他情况下,您将不必手动应用.ordering(...)