2012-01-03 5 views
1

ジャンゴ - 無効なブロックタグ:期待される 'add_pinned_status'、 '他' または 'endifの'

Invalid block tag: 'add_pinned_status', expected 'else' or 'endif'

nginxの+のFastCGIを使用して、私のDjangoアプリケーションを提供することは奇妙なことに、サイトはちょうど働くとき、私は次のエラーを取得します私がDjango開発サーバーを使用している場合は問題ありません。 Nginxではほとんどの場合動作しますが、エラーがランダムに表示され、再表示されます。どのような問題が起こる可能性がありますか?

EDIT:ここにコードがありますが、if文がぶら下がっていないことを明確にするためです。

{% extends 'master.html'%} 
{% load thumbnail %} 
{% load tags %} 

{% block 'title' %} 
    {{ title }} 
{% endblock %} 

{% block 'content' %} 
<div id="feed" class="content"> 
    {% for book in books.object_list %} 
    <div class="book_preview"> 
     <div class="thumbnail"> 
      <a href="/book/{{ book.id }}/{{ book.get_slug }}/"> 
      {% if book.cover_image %} 
      {% thumbnail book.cover_image "120" as im %} 
      <img src="{{ im.url }}" alt="Python for Software Design"/> 
      {% endthumbnail %} 
      {% else %} 
      <img src="{{ STATIC_URL }}default_thumb.jpg" alt="Python for Software Design"/> 
      {% endif %} 
      </a> 
     </div> 
     <div class="book_details"> 
      <h2 class="book_title"> 
       <a class="book_profile_link" href="/book/{{ book.id }}/{{ book.get_slug }}/">{{ book.title }}</a> 
       {% if user != book.uploader %} 
       <a class="shelf_adder {% add_pinned_status request book.pk %}" href="/shelf/{{ book.id }}/toggle/?next={{ request.get_full_path }}" title="Toggle shelf status"></a> 
       {% endif %} 
      </h2> 
      <h3 class="book_subtitle"> 
      {% if book.subtitle %} 
       {{ book.subtitle }} 
      {% else %} 
       <a href='/book/{{book.id}}/edit/#subtitle'>Provide subtitle</a> 
      {% endif %} 
      </h3> 
      <h3 class="book_authors"> by {{ book.author.filter|join:", " }}</h3> 
      <div class="book_description"> 
      {% if book.description %} 
      <p> 
       {{ book.description|truncatewords:25 }} 
      </p> 
      {% else %} 
      <p class="message">No description available. Create one.</p> 
      {% endif %} 
     </div> 

     <div class="book_links"> 
      <a href="/book/{{ book.id }}/{{ book.get_slug }}/" class="book_profile_link" title="Book profile"> 
       Book profile 
      </a> 
      <a href="http://{{ book.homepage }}" class="book_website_link" title="Book website" target="_blank"> 
       Book website 
      </a> 
     </div> 
     <p>Points: {{ book.shelf_additions }}</p> 
     <div class="book_tags"> 
      {% if book.topics.all %} 
       {% for topic in book.topics.filter %} 
        <a href="/topic/{{ topic }}/" title="Browse this topic">{{ topic }}</a> 
       {% endfor %} 
      {% else %} 
       <a href="/book/{{ book.id }}/edit/#topics" title='Click to add'>no topics added&#9785;</a> 
      {% endif %} 
      </div> 
     </div> 
     <div style="clear: both;"></div> 
    </div> 
    {% endfor %} 
    <div class="pagination"> 
     {% if books.has_previous %} 
      <a href="?page={{ books.previous_page_number }}">previous</a> 
     {% endif %} 
      <span class="current"> 
       Page {{ books.number }} of {{ books.paginator.num_pages }} 
      </span> 
     {% if books.has_next %} 
      <a href="?page={{ books.next_page_number }}">next</a> 
     {% endif %} 
    </div> 
</div> 
{% endblock %} 

問題は、あなたが見ることができるように、適切なendifで終了しif user != book.uploader文の後の行、に開始されます。私はそれがタイムアウトの何らかの種類かもしれないと思うが、私は完全にはわからない。 Nginxを使用しているときは時々動作しますが、ランダムに停止します。これは、devサーバーと完璧に動作します。

答えて

3

Djangoは閉じられていないtemplatetagがあるときにそのエラーを返します。この場合、{% if ... %} templatetagです。

なぜなら、それは条件付きのタグ自体の中にあるかもしれないので、常に処理されるわけではありませんが、条件付きで起こっていることにもかかわらず、Djangoはテンプレート全体を処理すると思います。運用サイトの更新に間違いがあり、開発サイトとは異なる/古いバージョンを使用している可能性もあります。

それにかかわらず、エラーはエラーです。閉じられていないtemplatetagを見つけたら、それを全面的に解決します。

更新:代替方法として、add_pinned_sitesのtemplatetagが未定義です。実際には{% load tags %}にロードされていると仮定して、そのテンプレートタグライブラリが実行中のすべての環境で使用可能であることを確認してください。つまり、文字通りサーバー上に存在します。それが実際にある場合は、Nginx + FastCGI環境を完全にリロードしてください。あるいは、サーバを再起動して完全に確実にするようにしてください。

+0

私はちょうどコードで質問を更新しました。 if文は終了しますが、その他の問題がある場合はお知らせください。ありがとう。 –

+0

こんにちはクリス。特定の要素に「固定」されたクラスを追加するために使用するカスタムタグです。定義されロードされていることを確信しています。私はかなり数回Nginxをリロードしました。私はあなたのすべての提案を考え、逆算したので、迷惑です。私はそれを再作成しようとしているので、ここ数時間働いています。あなたの時間をありがとう。それは有り難いです。 –

2

"tags"はadd_pinned_sitesを保持するタグライブラリの実際の名前ですか?それをもっと明確な名前に変更する価値があるかもしれません。ちょうどそれが別のタグライブラリ(Djangoの組み込みタグなど)との間でインポートの衝突を見ている可能性があるかどうか疑問です。

+0

私はあなたの提案を試してみましたが、それは何時間も最後まで働いていたので、何か影響があるかどうかはわかりません。私が理解しようとしているのは、ランダム化です。命名の衝突が各要求時にインポートを妨げないでしょうか?さらに、開発サーバーを使用しているときに問題が発生したことはありませんでした。たぶん私はこれを強調するために質問を別々に表現すべきです。それはすべて非常にイライラしています。ありがとう。 –

+0

申し訳ありませんが、その答えは私より賢い人が必要になります。私は完全にそれのランダムな性質の不満を得る。コンピュータで「ランダム」な振る舞いを見たときに覚えておくべきことは、ほとんどいつもあなたが台無しにしたことです。コンピュータはランダムではありません。 – Tom

+0

ハハ。けっこうだ。私は、悪意のあるプログラマーが悪意のある行為をしていることをどこかに読んでいることをぼんやりと覚えているので、心に留めておきます。とにかくありがとう。 –

関連する問題