django - 无效的块标记:'add_pinned_status',期望'else'或'endif'

时间:2012-01-03 15:39:12

标签: django nginx django-templates

使用Nginx + FastCGI

提供我的django应用程序时出现以下错误

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

奇怪的是,当我使用Django开发服务器时,该网站运行正常。它大多数时候也适用于Nginx,但随机出现错误并重新出现刷新。知道问题可能是什么?

编辑:这是代码,只是为了澄清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 %}

问题从if user != book.uploader语句之后的行开始,正如您所看到的那样,该语句以相应的endif终止。我怀疑这可能是某种超时但我不完全确定。请记住,它有时会起作用,但在使用Nginx时会随机停止。它与开发服务器完美配合。

2 个答案:

答案 0 :(得分:3)

当你有一个未关闭的模板标签时,Django会给出错误。在这种情况下,{% if ... %}模板标签。

至于为什么它只发生在某些情况下,它可能在条件标签本身内部,所以它并不总是被处理,但我认为Django处理整个模板,尽管有条件或没有。也许有可能在更新您的生产站点时出现了一些错误,并且它使用的是与您的开发站点不同的旧版本。

无论如何,错误是错误。找到未公开的模板标签,您将全面解决。

更新:另一种方法是add_pinned_sites模板标签未定义。假设它实际上已加载到{% load tags %}中,请确保该模板标签库在所有正在运行的环境中都可用,即它确实存在于服务器上。如果确实存在,请确保完全重新加载Nginx + FastCGI环境,或者只是重启服务器以确保完全正确。

答案 1 :(得分:2)

“tags”是否包含add_pinned_sites标记库的实际名称?可能值得将其更改为更清晰的名称 - 只是想知道是否有可能看到它与另一个标记库(如Django的内置标记)之间的导入冲突。