如何将带有 django 标签的 javascript 代码加载到我的 django 模板中

Posted

技术标签:

【中文标题】如何将带有 django 标签的 javascript 代码加载到我的 django 模板中【英文标题】:How do i load javascript code with django tags into my django template 【发布时间】:2016-09-18 00:46:02 【问题描述】:

情况:我使用的是 Django 1.9。我有一个javascript循环,它需要一些存储在数据库中的javascript。这个 js 有一些 django 标记,当该 js 加载到我的模板中时,我想加载这些标记。 这是函数:

% extends "base_clean.html" %
% load i18n %
% block title %% trans "Campaign" % -  campaign.name % endblock %

% block content %


Some HTML

Some CSS

<script type="text/javascript">

Some javascript functions.

displayed = 0;
delay = 1000;
(function loop() 
   setTimeout(function() 
   p = pq.getMessage()
   if( p != false ) 
      posthtml = get_message_html(p);
      displayed++;

        display_style.layout.js|safe  /* !!!!!!!!!!!!!!!!!!*/


   if( pq.messagesCount() < 10 )
      pq.getMessages()
   
   loop();
 , delay);
)();
</script>
% endblock %

这就是 display_style.layout.js|safe 加载的内容:

setTimeout(function() 
        $('#messages_container').append(posthtml);
        % if display_style.post_append_effect %
          $(posthtml).addClass("animated  display_style.post_append_effect.css ");
        % endif %
      , 900);
    

    if(displayed ==  display_style.messages_per_page )
        delay =  display_style.seconds_between_messages 000;
    

    if(displayed >  display_style.messages_per_page )
      $target = $('#messages_container div.list-group-item').first()
      % if display_style.message_remove_effect %
        $target.removeClass("animated  display_style.post_append_effect.css ")
        .addClass("animated  display_style.post_remove_effect.css ");
      % endif %
      setTimeout(function() 
        $target.remove();
        displayed--
      , 900);

    

如您所见,它有一些我也想渲染的 django 标签。但我有“Uncaught SyntaxError: Unexpected token %”

编辑:添加了 django 标头标签。和模板的结构 忘了说,如果我明确地写了我想渲染到我的模板的 js,它就可以工作......问题是试图将标签渲染到渲染的 js 中

【问题讨论】:

问题不在于您显示的代码,但您并未显示所有内容。请显示模板的其余部分和错误跟踪的其余部分。 好的,我会简化模板文件,因为它非常大.. 只是把它所涉及的内容放在这里。关于错误跟踪它只是......我的意思是,chrome开发工具在第一个“% if display_style.post_append_effect %” 【参考方案1】:

我认为问题在于您将第二个模板作为文本字符串加载,而不是使用 Django 的 include template tag。尝试将 display_style.layout.js|safe 更改为% include "display_style.layout.js" %,任何语法错误都会变得更加明显。

您还应该考虑使用 Django 的静态文件来加载您的 javascript,而不是在您的模板中包含 javascript。然后根据this answer,您可以简单地在&lt;script&gt; 标记中定义要传递给javascript 的变量,您可以在javascript 文件中引用这些变量。比如:

Django 模板

% load staticfiles %
<!-- Some html -->
<script>
    var displayStyle =  display_style ;
</script>
<script type="text/javascript" src="% static 'your_js_file.js' %"></script>
<!-- Rest of your HTML -->

通过静态文件加载的JS文件

var displayStyle = window.displayStyle || null;
if (displayStyle) 
    // Your code here.

最后,特定错误的一种可能性是您包含的模板在某处有一个% 字符。这需要在 django 模板系统中转义为 %%

【讨论】:

我会尝试静态文件的方式。我仍然无法“动态”加载js ..我得说这样做的目的是什么,也许你可以暗示我应该做什么。它必须采用布局的 html、css 和 javascript 来显示消息。所以我应该能够“插入”和“拔出”布局具有的附加 html/css/js。我已经完成了 html 和 css 部分。问题出在 js PS:感谢@YPCrumble 的回答 @Ctrl4 你不应该“拔出”javascript - 很可能有一种方法可以使相同的JS代码适用于你的html的不同迭代。还有一个问题 - 在第一个 setTimeout 函数之后的代码的第五行,您没有额外的 吗? 实际上我的想法很糟糕......我将 django 模板与 mustache js 混合在一起,但我以一种糟糕的方式“拔掉”了 js。如您所见,我有一个额外的,但这是我的这种错误思考的一部分。我做到了,感谢您对使用静态文件的回答。

以上是关于如何将带有 django 标签的 javascript 代码加载到我的 django 模板中的主要内容,如果未能解决你的问题,请参考以下文章

如何将javascript变量传递给django模板标签

如何在 Django 模板中的“带有模板标签”中设置 Django 渲染块值?

如何使用带有 Django 模板标签的 amp CSS 星级评分?

Django:将带有 HTML 和 Django 模板标签的 Views.py 中的字符串变量注入 HTML 文件

带有 jQ​​uery 的 Django 模板“包含”标签

在视图而不是模板中生成带有 Django 静态 url 的图像标签