在javascript文件中使用Django URL

时间:2013-03-04 23:02:40

标签: django django-templates django-views django-urls

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

我定义了一个提供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网址来获取呈现的javascript文件。

html文件:

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

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

问题:

1)在javascript文件中使用url-names是否有更好/更快的方法?我知道已经创建了一些应用程序来实现这一目标,但我希望得到每个人(django专家)关于实现这一目标的最佳方法的意见。

2)我们可以在第一次渲染渲染的javascript文件后对其进行缓存,以便在每个后续请求中,我们不必再渲染它们吗?如果是,那么我们该如何去做呢。

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

注意

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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