django如何两次渲染相同的模板[重复]

Posted

技术标签:

【中文标题】django如何两次渲染相同的模板[重复]【英文标题】:django how to render same template twice [duplicate] 【发布时间】:2018-10-31 16:06:58 【问题描述】:

我是使用 django 的新手,不熟悉我的问题应该如何措辞。

我一直在开发一个新的网络应用程序,但注意到网站的初始加载速度很慢。我当前的视图代码在这里。

from jinja2 import Environment, FileSystemLoader
from django.http import HttpResponse
from tools import fetcher
import requests
import json

def index(request):
    env = Environment(loader=FileSystemLoader('templates'))
    template = env.get_template('index.html')
    template_values = 'popular_stocks': []
    popular = fetcher.get_tops()

    for instrument in popular:
        r = requests.get('https://api.iextrading.com/1.0/stock/%s/quote' % (instrument['symbol']))
        quote = json.loads(r.content.decode('utf-8'))
        template_values['popular_stocks'].append(quote)

    return HttpResponse(template.render(template_values))

有没有办法通过首先加载初始 index.html 而没有任何流行股票,然后将 fetcher.get_tops() 提交给模板值来加快我网站的加载速度?

我知道 AJAX,但我不确定如何实现它,或者这是否是我所需要的。

我们将不胜感激。

【问题讨论】:

上述 ajax 问题适用于不同的 URL,但我不想更改 URL。我希望以块的形式加载我当前的 URL 不需要向最终用户公开其他 URL(当然,他们的浏览器会看到它们)。就您的用户而言,他们正在加载一个页面。 (意见:重载单个 URL 来执行多项操作是一个非常糟糕的主意™。它会令人困惑,并且会成为维护的噩梦。如果您感觉自己在与 Python、Django 和HTTP 本身可能是你做错了什么的好兆头。) 我想我可能需要重新设计我的网络应用程序以更好地处理我正在处理的所有请求数据,但您的评论确实解决了我的问题。 【参考方案1】:

是的,在这种情况下我肯定会使用 AJAX。

其他策略可能是在某处缓存股票价格(MEMCACHE、Redis?),因此只是根据缓存过期策略进行更新,而不是在每次页面加载时进行更新。

【讨论】:

以上是关于django如何两次渲染相同的模板[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django模型基于两个变量防止重复[重复]

如何从列表中删除两次包含相同数字的组合,其中重复包含相同的数字?

如何在视图 Django 中更改渲染以返回 json [重复]

我将如何阻止随机颜色随机选择两次相同的颜色[重复]

Django:如何遍历模板内的两个列表[重复]

如何在django模板中实现列表迭代[重复]