Django 数据保存和呈现

我的Django项目需要在views.py的一个函数中处理后获取一个列表。


def acquire(request):

    import sys

    n = []

    for topic in Topic.objects.filter(owner=request.user).order_by("date_added"):

        entries = topic.entries.all()

        q = entries.text

        n.append(q)

    return render(request, "projects/topics.html", n)

需要将上面的列表“n”转移到另一个“results.html”页面中的信息的views.py的另一个函数中。


def results(request):

    data = XXXX

    return render(request, "projects/results.html", {"datas": data})

如何在结果功能中编辑“XXX”以传输“n”列表?


PIPIONE
浏览 249回答 3
3回答

莫回无

您可以在函数外部声明列表 n,以便您可以在任何需要的地方使用它,例如:n = []def acquire(request):    import sys    for topic in Topic.objects.filter(owner=request.user).order_by("date_added"):        entries = topic.entries.all()        q = entries.text        n.append(q)    return render(request, "projects/topics.html", n)def results(request):    data = n    return render(request, "projects/results.html", {"datas": data})

ABOUTYOU

您可以编写一个可供两个视图使用的实用函数,并存储当前会话的数据:def acquire(request):    data = _get_data(request)    return render(request, "projects/topics.html", {'data': data})def results(request):    data = _get_data(request)    return render(request, "projects/results.html", {'data': data})# this is not a view, but a utility functiondef _get_data(request)    # this will try to use the data generated in a previous request of    # the same session. So the data might be stale by now    if not 'user_entries' in request.session:        n = []        for topic in Topic.objects\                      .filter(owner=request.user)\                      .order_by('date_added')\                      .prefetch_related('entries'):  # prefetch avoids the nested queries            for entry in topic.entries.all():                n.append(entry.text)        request.session['user_entries'] = n    return request.session['user_entries']

慕村9548890

您必须记住,无论您设置什么变量,它都只存在于视图/函数中,因为 Django 是无状态的。这就是为什么你有一个数据库和 cookie。这就是你如何做到的。除非该列表有成千上万的条目,否则这将很快。def results(request):    data = []    for topic in Topic.objects.filter(owner=request.user).order_by("date_added"):        entries = topic.entries.all()        q = entries.text        data.append(q)    return render(request, "projects/results.html", {"datas": data})如果您想非常快,您可以更改请求并在数据库级别工作并创建连接。类似的东西(我有点生疏)data = Entries.objects.filter(topic__owner=request.user).order_by("topic__date_added").values("text")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python