繁体   English   中英

如何在Javascript和Django中执行此操作?

[英]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)始终采用“安全”格式(即,数据来自SlugFieldIntegerField或数据库中的某些数据)。

但是,如果两者都不是,则需要通过转义适当的字符来防止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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM