[英]How do I do this in Javascript and Django?
我习惯于将JavaScript放在页面顶部的顶部。 在我的JavaScript中,我使用了许多来自Django的模板,例如: {{ user.id }} {{ post.body }}
我决定将JavaScript移至另一个文件,然后使用以下script src=
将其导入: script src=
但是由于我的JavaScript现在在另一个文件中,因此它无法读取Django模板内容。
我该怎么办? 我在javascript上都有Django模板,我必须将javascript移到另一个文件。
您也可以将JavaScript生成为模板! 但这需要通过Django提供动态JavaScript。
例如..
#views
def some_js(request):
return render_to_response('js/some_dynamic_js.js', {}, mimetype='text/javascript')
没有什么可以说Django模板必须是HTML。 它们只是模板化TEXT的一种方式。 代码是文本,因此可以作为模板。 我在当前项目中执行此操作。
您可以使用Samet建议的JSON数组,甚至可以使用常规JS变量。
<script type='text/javascript'>
some_numeric_property = {{variable1}};
some_string_property = '{{variable2}}';
</script>
另一种方法(我通常会采用的方法)是通过函数调用和data-
属性传递您需要的所有详细信息。 例如,如果我希望某个链接在悬停时弹出带有用户个人资料的AJAX气泡,则可以这样做:
<a href='/profile/{{user.id}}' onmouseover='show_user_popup({{user_id}})'>{{user.name}}</a>
或这样(假设我的脚本将事件附加到具有user-link
类的user-link
):
<a href='/profile/{{user.id}}' class='user-link' data-uid='{{user_id}}'>{{user.name}}</a>
如果需要,还可以在加载HTML之后直接在HTML的head
调用这些函数。
<script type='text/javascript' src='{{MEDIA_URL}}/js/whatever.js'></script>
<script type='text/javascript'>
do_something_with_a_number({{variable1}});
do_something_with_a_string('{{variable2}}');
</script>
后者的优点是,因为在加载JS文件时不会执行任何代码(显然,除了创建和绑定function
对象外),因此您可以在网站的每个页面上包含一个JS文件,然后调用在相应页面上需要的位。 然后,在第一次加载后(假设您要发送正确的标题),将缓存该文件,从而减少了后续页面的加载时间。
编辑:安全考虑:我已经描述了该方法(以及此页面上的许多其他方法),建议将数据插入为a)HTML标签的属性或b)JavaScript实体。 只要您知道以下数据是安全的:a)不能由不受信任的用户设置数据,或b)始终采用“安全”格式(即,数据来自SlugField
或IntegerField
或数据库中的某些数据)。
但是,如果两者都不是,则需要通过转义适当的字符来防止HTML和/或JS注入。 Django的HTML实体转义的默认行为在某些情况下可能会保护您,但可能不会,因此值得检查。
在脚本标签的页面顶部转储一些JSON对象 :
<script type='text/javascript'>
var a = {{ someJsonObject }}
</script>
然后包括您单独的javascript文件,并使用a.variable1,a.variable2等 。 在您的JavaScript代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.