我有一个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中显示即时结果?
答案 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(...)
。