Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数据从Django视图获取到JS以在页面上执行的最佳实践?_Javascript_Python_Django_Django Templates_Django Views - Fatal编程技术网

Javascript 将数据从Django视图获取到JS以在页面上执行的最佳实践?

Javascript 将数据从Django视图获取到JS以在页面上执行的最佳实践?,javascript,python,django,django-templates,django-views,Javascript,Python,Django,Django Templates,Django Views,有人告诉我,从Django视图返回数据并在页面上加载的Javascript中使用这些返回的项目是“不好的做法” 例如:如果我正在编写一个需要一些额外数据来加载/显示基于javascript的图形的应用程序,我被告知从Django视图传递的模板变量直接将数据传递到页面上的javascript中是错误的 我的第一个想法是: 只需在django视图中获取图形所需的数据,并在模板中使用的上下文变量中返回它。然后直接在模板中的javascript中引用该上下文变量 它应该可以很好地加载数据,但我被告知

有人告诉我,从Django视图返回数据并在页面上加载的Javascript中使用这些返回的项目是“不好的做法”

例如:如果我正在编写一个需要一些额外数据来加载/显示基于javascript的图形的应用程序,我被告知从Django视图传递的模板变量直接将数据传递到页面上的javascript中是错误的

我的第一个想法是:

  • 只需在django视图中获取图形所需的数据,并在模板中使用的上下文变量中返回它。然后直接在模板中的javascript中引用该上下文变量
它应该可以很好地加载数据,但我被告知这是错误的方法

那么,如何最好地实现这一目标呢

我的第二个想法是:

  • 启动Django Rest框架并创建一个端点,在该端点上传递任何所需数据,并在页面加载时发出AJAX请求,然后加载数据并执行所需的JS操作
这是可行的,除了一件事,我如何将AJAX请求所需的变量放入AJAX请求本身

我必须从上下文(这是“错误的方式”)或者从URL获取参数。有什么简单的方法可以解析JS中URL的数据吗?不利用视图获取所需的数据并直接在JS中访问这些变量,这似乎是一件棘手的事情

那么,从Django视图传递数据并直接在Javascript中使用它真的是一种“糟糕的做法”吗

这两种方法都可以接受吗


Django将这样的数据放入给定页面/模板的Javascript中的合适方法是什么?

直接传递数据并不总是错误的方法。JS在那里,所以当其他一切就绪时,您可以执行代码。因此,当他们告诉你直接传递数据是错误的方式时,那是因为在JS出现之前,没有必要让页面和数据变得比应该的更重

但是传递基本数据是可以的,这样你的JS代码就知道它要做什么了。为了更清楚,让我们来看看你的情况:

您要渲染一个图形。而且图形有时很难渲染,这会使第一次渲染变慢。大多数情况下,如果没有页面提供的额外上下文,图形就没有那么大的用处。因此,为了使您的网页加载更快,您可以让JS在呈现网页后加载图形。如果您要等待,那么传递所需的额外数据就没有意义了,因为这会使页面更重,降低初始呈现的速度,并且需要时间来解析这些数据并将其转换为JSON对象

通过删除数据并让JS在后台加载它们,可以使页面更小,渲染速度更快。因此,当用户读取图形所需的上下文时,JS将获取所需的数据并呈现图形。这将使您的网页具有更快的初始渲染速度

因此,一般来说:

何时直接传递数据:

  • 当初始数据对于JS来说是必须的时(配置、默认值等)
  • 当时差非常重要,并且您不能等待太多的额外请求来完成渲染时
  • 当数据非常小时
不直接传递数据时:

  • 当呈现额外数据时,无论如何都需要时间,那么为什么不将数据也呈现在后面呢
  • 当数据量很大时
  • 当您需要尽可能快地渲染某些内容时
  • 当这些数据需要一些繁重的过程时
  • 当JS可以减小数据大小时(决定应该使用只有JS可以访问的选项准确地传递哪种类型的数据)

直接传递数据并不总是错误的做法。JS在那里,所以当其他一切就绪时,您可以执行代码。因此,当他们告诉你直接传递数据是错误的方式时,那是因为在JS出现之前,没有必要让页面和数据变得比应该的更重

但是传递基本数据是可以的,这样你的JS代码就知道它要做什么了。为了更清楚,让我们来看看你的情况:

您要渲染一个图形。而且图形有时很难渲染,这会使第一次渲染变慢。大多数情况下,如果没有页面提供的额外上下文,图形就没有那么大的用处。因此,为了使您的网页加载更快,您可以让JS在呈现网页后加载图形。如果您要等待,那么传递所需的额外数据就没有意义了,因为这会使页面更重,降低初始呈现的速度,并且需要时间来解析这些数据并将其转换为JSON对象

通过删除数据并让JS在后台加载它们,可以使页面更小,渲染速度更快。因此,当用户读取图形所需的上下文时,JS将获取所需的数据并呈现图形。这将使您的网页具有更快的初始渲染速度

因此,一般来说:

何时直接传递数据:

  • 当初始数据对于JS来说是必须的时(配置、默认值等)
  • 当时差非常重要,并且您不能等待太多的额外请求来完成渲染时
  • 当数据非常小时
不直接传递数据时:

  • 当呈现额外数据时,无论如何都需要时间,那么为什么不将数据也呈现在后面呢
  • 当数据量很大时
  • 当您需要尽可能快地渲染某些内容时
  • 当这些数据需要一些繁重的过程时
  • 当JS可以使您的数据大小变小时(决定应该使用仅acce的选项准确地传递哪种类型的数据)