有人告诉我,从 Django View 返回数据并在页面加载的 Javascript 中使用这些返回的项目是“不好的做法”。
例如:如果我正在编写一个需要一些额外数据来加载/显示基于 javascript 的图表的应用程序,我被告知从 Django 传递的模板变量直接将该数据传递到页面上的 javascript 中是错误的查看。我的第一个想法:
- 只需在 django View 中获取图形所需的数据,并将其返回到要在模板中使用的上下文变量中。然后只需在模板的 javascript 中直接引用该上下文变量即可。
它应该可以正常加载数据 - 但我被告知这是错误的方式。
那么如何最好地实现这一点呢?
我的第二个想法:
- 启动 Django Rest Framework 并创建一个端点,您可以在其中传递任何所需的数据并在页面加载时发出 AJAX 请求 - 然后加载数据并执行所需的 JS 操作。
这可行,除了一件事,我如何将 AJAX 请求所需的变量获取到 AJAX 请求本身?
我必须从上下文中获取它们(这是“错误的方式”),或者从 URL 中获取参数。有没有简单的方法可以在JS中解析出URL中的数据?不利用 View 获取所需数据并直接在 JS 中访问这些变量似乎是一件令人头疼的事情。
那么,从 Django View 传递数据并直接在 Javascript 中使用它真的是“不好的做法”吗?
这两种方法都可以接受吗?
Django 将此类数据获取到给定页面/模板上的 Javascript 的适当方法是什么?
最佳答案
直接传递数据并不总是错误的方法。 JS 就在那里,因此您可以在其他一切准备就绪时执行代码。因此,当他们告诉您直接传递数据的方式是错误的时,这是因为在 JS 启动之前使页面和数据变得比应有的重量是没有意义的。
但是传递基本数据是可以的,这样你的 JS 代码就知道它必须做什么。为了更清楚地说明这一点,让我们看看您的案例:
您想要渲染一个图表。有时,图形渲染起来很繁重,这可能会使第一次渲染变慢。大多数时候,如果没有页面提供的额外上下文,图表就没那么有用。因此,为了使您的网页加载速度更快,您可以让 JS 在网页渲染后加载您的图表。如果您要等待,那么传递所需的额外数据是没有意义的,因为它会使页面更重并减慢初始渲染速度,并且需要时间来解析这些数据并将其转换为 JSON 对象。
通过删除数据并让 JS 在后台加载它们,您可以使页面更小并且渲染速度更快。因此,当用户读取图表所需的上下文时,JS 将获取所需的数据并呈现图表。这将使您的网页具有更快的初始渲染速度。
一般来说:
何时直接传递数据:
- 当 JS 需要初始数据来执行其必须执行的操作(配置、默认值等)时。
- 当时差非常重要并且您无法等待额外请求来完成渲染时。
- 当数据非常小时。
何时不直接传递数据:
- 渲染额外数据无论如何都需要时间,那么为什么不稍后获取数据呢?
- 当数据量很大时。
- 当您需要尽快渲染某些内容时。
- 当这些数据需要一些繁重的处理时。
- 什么时候 JS 可以让你的数据量变得更小(使用只能由 JS 访问的选项来决定应该传递什么样的数据。)
关于javascript - 将数据从 Django View 获取到 JS 以在页面上执行的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60209990/