在 javascript 文件中使用 Django url

Posted

技术标签:

【中文标题】在 javascript 文件中使用 Django url【英文标题】:Using Django urls in javascript files 【发布时间】:2013-02-19 04:57:57 【问题描述】:

我正在尝试在我的 javascript/jquery 文件中使用 url-names 来处理 AJAX 请求,并且我找到了几个可以解决此问题的解决方案。我目前使用的是下面这个。

我定义了一个 url 来提供 javascript 文件:

urls.py

url(r'^js/([\w\.\-]+)/([\w\.\-]+)/$', 'views.get_javascript_file', name='get_javascript_file')
url(r'^getmoredicus/$', 'load_discussions', name="load-discus"),

然后我定义呈现 javascript 文件的视图。

views.py:

def get_javascript_file(request, app_name, js_file):
'''
    Used to request and serve rendered javascript/jquery files.
'''
return render_to_response("%s/%s.js" % (app_name, js_file), 
                          context_instance=RequestContext(request))

现在在 html 文件中,我们可以使用 get_javascript_file url 来获取渲染的 javascript 文件。

html 文件:

<script type="text/javascript" src="% url get_javascript_file 'myapp' 'jsfile' %"></script>

现在在任何 javascript 文件中,我都可以通过% url url-name % 访问url-names

问题:

1) 有没有更好/更快的方式在 javascript 文件中使用 url-names?我知道已经创建了一些应用程序来完成此任务,但我希望获得每个人(django 专家)对完成此任务的最佳方式的意见。

2) 我们能否在第一次渲染后缓存渲染的 javascript 文件,以便在每个后续请求中,我们不必再次渲染它们?如果是,那我们该怎么做呢。

3) 在这种方法中,我们从它们的应用程序文件夹中渲染脚本文件。有没有办法从get_javascript_file 视图访问位于STATIC_ROOT 的静态文件?我只是在考虑这将如何在生产环境中工作。从他们的应用程序文件夹访问静态文件而不是将它们放在STATIC_URL 并从那里访问它们是一种好习惯吗?

注意

我知道已经有一些关于 SO 的问题可以回答这个问题的某些部分,但我只是想一劳永逸地为未来的 django 学习者了解这一点。在javascript 或任何script 中使用url-names 的最佳方式是什么?

【问题讨论】:

【参考方案1】:

我不喜欢通过视图渲染运行外部 js。特别是如果你使用 django-compressor 之类的东西来压缩和缓存你的 js 文件。

我更喜欢在包含外部文件之前只在脚本标签中包含变量。

<script>
    my_var = " MY_PROPERTY "
</script>
<script type="text/javascript" src=" STATIC_URL js/external_script.js"></script>

该解决方案也并不总是理想的,但我对其他解决方案持开放态度。

【讨论】:

以上是关于在 javascript 文件中使用 Django url的主要内容,如果未能解决你的问题,请参考以下文章

在 Django 应用程序中使用 JavaScript 加载文件

在 javascript 文件中使用 Django url

上传文件后,如何在 Django 中使用 AJAX 更新表(与 JavaScript 链接)?

使用 django 将 STATIC_URL 传递给文件 javascript

Django 将数据发送到 Javascript 文件

django 无法读取 csv 文件以在 javascript 和 html 模板中绘制 highchart