javascript - 将数据从 Django View 获取到 JS 以在页面上执行的最佳实践?

标签 javascript python django django-templates django-views

有人告诉我,从 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/

相关文章:

php - 使用 Js/Jquery 和 PHP 进行表单验证

javascript - 一次具有相同形式的多个按钮

python - 枕头 OSError : cannot identify image file <_io. BytesIO 对象在 0x02345ED8>

python - 从 django.core.mail EmailMessage 进入死循环

python - 在 Django 1.10 中将三元组与排名搜索相结合

javascript - 调整大小时的动态 Flex 元素

javascript - 根据子元素的值对 div 进行排序

python - Flask:导入错误:无法导入名称 'db'

python - 如何在 tensorflow 中累加1到10?

python - 如何让用户改变他的属性?