2011-05-15 67 views

回答

24

是的,我经常这样做。你的JavaScript必须通过django来提供,但是如果你只是将它作为内嵌JavaScript的HTML头部,你会没事的。

例如:我使用它将前缀放在我使用的动态formset上。在 “base.html文件”

{% extends "base.html" %} 
{% block extrahead %} 
<script type="text/javascript"> 
$(document).ready(function() { 
    {# Append fields for dynamic formset to work#} 
    {% for fset, cap, _, tid in study_formsets.fset_cap_tid %} 
     $(function() { 
      $('.form_container_{{ tid }}').formset({ 
         prefix: '{{ fset.prefix }}', 
         formCssClass: '{{ tid }}', 
         extraClasses: ['myrow1', 'myrow2'] 
        }); 
     }); 
    {% endfor %} 
}); 
</script> 
{% endblock %} 

注意我有一个HTML head在jQuery的库被加载,包含{% block extrahead %}{% endblock %}

+0

是否有任何现代的方式如何做到这一点?在html中混合javascript并不完全不显眼.. – Mejmo 2013-09-10 16:12:22

+1

@Mejmo - 好吧,你可以让你的javascript文件动态地由django提供服务(例如,为js文件起草一个模板,为它生成一个视图,并将它添加到你的网址。 PY)。当然,与内联JS相比,这可能会效率更低,管理更少(每个页面加载需要两个动态处理的文件) - 除非在许多模板中需要相同的动态JS。真的,最好的方法是使用静态JS文件,这些文件处理来自DOM的数据(可能最初隐藏)或者在json数据中动态提供服务。如果您需要JS中的模板标签逻辑,请将其写入JS中。 – 2013-09-10 16:39:42

+0

请检查此; ''你看到我在这个脚本中使用Django模板语言的任何原因('var station_id = {{station.id}}')不起作用。 – 2015-05-27 05:13:40

11

如果这就是你的意思,你不能从你的Javascript代码中使用Django的模板标签。所有的Django变量和逻辑在模板被渲染并且HttpResponse已经被发送到客户端之后都会停止。在Javascript执行的那一刻,客户端(浏览器)没有概念提供模板的变量(比如“form”)。

您可以做的是让Javascript使用由您的Django模板呈现的HTML块来修改您的HTML页面。

如果你想在客户端生成HTML,我建议查看客户端tempalte库(例如JQuery Templates - 使用那些与{% verbatim %} templatetag)。

0

如果你想在渲染的javascript里面使用变量(这是我的opnion),认为这是一个坏主意。但是,如果你只想为你的视图,媒体和静态文件生成URL,我会做很多。

看看这个github上:jscssmin