2016-05-20 7 views
2

状況:Django 1.9を使用しています。そして、私はデータベースに格納されているいくつかのJavaScriptを取るjavascriptループを持っています。このjsには、jsがテンプレートに読み込まれるときにロードしたいdjangoタグがいくつかあります。 これは、関数である:djangoテンプレートを使用してjavascriptコードをdjangoテンプレートにロードする方法

{% 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 |安全}}である負荷:あなたは、それは私もしたい、いくつかのDjangoのタグを持って見ることができるように

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); 

    } 

レンダリングする。しかし、私は "Uncaught SyntaxError:予期しないトークン%"を持っています

EDIT:djangoヘッダタグが追加されました。テンプレートの構造 そして、テンプレートにレンダリングしたいjsを明示的に書くと、問題はレンダリングされたjsにタグをレンダリングしようとしています。

+0

表示されているコードに問題はありませんが、すべてが表示されているわけではありません。残りのテンプレートと残りのエラートレースを表示してください。 – YPCrumble

+0

私はテンプレートファイルを単純化します。なぜなら、非常に大きなものです。 そして、そのエラートレースについては、私は、最初の "{%if display_style.post_append_effect%}"にエラーを置くことを意味します。 –

答えて

1

私はその問題はDjangoのinclude template tagを使用するのではなく、2番目のテンプレートをテキスト文字列としてロードしています。 {{ display_style.layout.js|safe }}{% include "display_style.layout.js" %}に変更してください。構文エラーがより顕著になるはずです。

また、テンプレートにjavascriptを含めるのではなく、javascriptを読み込むためにDjangoのstaticfilesを使用することを検討する必要があります。次にthis answerを入力すると、javascriptファイルで参照できる<script>タグでJavaScriptに渡す変数を簡単に定義できます。ような何か:

ジャンゴstaticfiles

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

最終介してロードテンプレート

{% 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ファイルには、特定のエラーのための一つの可能​​性は、あなたのインクルードされたテンプレートがどこか%性格を持っていることです。これは、djangoテンプレートシステムで%%としてエスケープする必要があります。

+0

私はstaticfilesの方法で試してみます。 私はまだjsを「動的に」読み込むことができません。 私はこれの目的が何であるかを言わなければならず、多分私は何をすべきかについてヒントを得ることができます。 メッセージを表示するためのレイアウトのhtml、css、javascriptが必要です。だから、私は "プラグ"と "レイアウトを持っているhtml/css/jsの接続を解除する"ことができます。私はすでにhtmlとcssの部分をしてきました。問題はjs PS:Thanks @ YPCrumble Answer –

+0

@ Ctrl4あなたはjavascriptの "プラグを抜く"必要はありません - ほとんどの場合、あなたのHTMLの異なる反復で同じJSコードを動作させる方法があります。もう1つの質問です。最初の 'setTimeout'関数の後に、そのコードの5行目に余分な'} 'がありますか? – YPCrumble

+0

実際、私はすべてが悪いと思っていました...私はジンジャーjsとジャンゴのテンプレートをミックスしていましたが、私は悪い方法でjsの "プラグを抜く"でした。あなたが見たように、私は余分な}があったが、それは私のこの誤解の一部であった。 私はそれを行い、静的ファイルの使用に関するあなたの答えに感謝しました。 –

関連する問題