关于在 JS 文件中使用 jinja 模板

About using jinja templating in JS file

我一直在使用一个模板,其中 JavaScript 文件中有上一个和下一个按钮的图像。我使用的框架是 Django,是否有任何解决方案可以将 jinja templating/rendering 用于 JS 文件中的这些图像。

JS代码:

$(".active-banner-slider").owlCarousel({
        items:1,
        autoplay:false,
        autoplayTimeout: 5000,
        loop:true,
        nav:true,
        navText:["<img src={% static 'img/banner/prev.png' >","<img src={% static 'img/banner/next.png' %}>"],
        dots:false
    });

我对 html 文件使用了相同的静态方法并且它有效,我不知道这个方法是否对 JS 文件有效?如果可以,正确的方法是什么?

是的,您可以使用 Django 模板处理器或 Jinja(如果您愿意)生成网页的 JS 组件。但是,您确实需要确保 JS 是在正确的上下文中生成的(由适当的标签包围,在呈现输出中的正确位置)。您还必须小心使用 { {} }(重要空格!)编写 JS 代码,永远不要使用 {{.

如果您使用“查看页面源代码”和浏览器的调试工具,您可能会发现自己做错了什么。

我的站点基本模板有一个块 onready_js 如下所示:

<script type="text/javascript"> $(document).ready(  function() {
{% block onready_js %}{% endblock onready_js %}   
   }); 
</script>

你可以在其中注入一些 JS,以便在页面准备就绪时执行,就像这样(忽略不相关的细节,除了使用 {{...}}{% if ... %} 等。没有任何块定义,基本模板生成空 $(document).ready( function() { });

{% block onready_js %}

{% if form or POST_name %} 
  // activate the button column to POST to this target with this name
  var buttons = $('button.MyFilterSelectButton');
  buttons.attr('type','submit').attr('name','{{POST_name}}')
  buttons.click( function(event){ 
  $('#id_{{POST_name}}').val( $(this).attr('value') );
    /* stuff deleted */
  $('.MyFilterSelectCol').show();

{% else %}
  // hide the button column which doesn't do anything useful
  $('.MyFilterSelectCol').hide();
{% endif %}

{% endblock onready_js %}