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

时间:2016-05-20 16:54:09

标签: javascript jquery django templates

情况:我正在使用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

1 个答案:

答案 0 :(得分:1)

我认为问题在于您将第二个模板作为文本字符串加载,而不是使用Django&#39; include template tag。尝试将<select>更改为{{ display_style.layout.js|safe }},任何语法错误都应该更加明显。

你还应该考虑使用Django的静态文件来加载你的javascript而不是在你的模板中包含javascript。然后,根据this answer,您只需在{% include "display_style.layout.js" %}标记中定义要传递给javascript的变量即可在javascript文件中引用。类似的东西:

Django模板

<script>

通过staticfiles

加载的JS文件
{% 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 -->

最后,特定错误的一种可能性是您所包含的模板在某处具有var displayStyle = window.displayStyle || null; if (displayStyle) { // Your code here. } 字符。这需要在django模板系统中以%进行转义。