使用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☹</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时会随机停止。它与开发服务器完美配合。
答案 0 :(得分:3)
当你有一个未关闭的模板标签时,Django会给出错误。在这种情况下,{% if ... %}
模板标签。
至于为什么它只发生在某些情况下,它可能在条件标签本身内部,所以它并不总是被处理,但我认为Django处理整个模板,尽管有条件或没有。也许有可能在更新您的生产站点时出现了一些错误,并且它使用的是与您的开发站点不同的旧版本。
无论如何,错误是错误。找到未公开的模板标签,您将全面解决。
更新:另一种方法是add_pinned_sites
模板标签未定义。假设它实际上已加载到{% load tags %}
中,请确保该模板标签库在所有正在运行的环境中都可用,即它确实存在于服务器上。如果确实存在,请确保完全重新加载Nginx + FastCGI环境,或者只是重启服务器以确保完全正确。
答案 1 :(得分:2)
“tags”是否包含add_pinned_sites
标记库的实际名称?可能值得将其更改为更清晰的名称 - 只是想知道是否有可能看到它与另一个标记库(如Django的内置标记)之间的导入冲突。