【问题标题】:django - Invalid block tag: 'add_pinned_status', expected 'else' or 'endif'django - 无效的块标签:'add_pinned_status',预期的'else'或'endif'
【发布时间】:2023-03-26 00:26:01
【问题描述】:

使用 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 时会随机停止。它与开发服务器完美配合。

【问题讨论】:

    标签: django nginx django-templates


    【解决方案1】:

    当你有一个未关闭的模板标签时,Django 会给出这个错误。在本例中为 {% if ... %} 模板标签。

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

    不管怎样,错误就是错误。找到未封闭的模板标签,您将全面解决它。

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

    【讨论】:

    • 我刚刚用代码更新了问题。 if 语句已终止,但如果您发现任何其他问题,请告诉我。谢谢。
    • 嗨,克里斯。这是我用来将“固定”类添加到某些元素的自定义标签,所以我确定它已定义并加载 - 当它工作时会出现所需的效果。我重新加载了 Nginx 好几次。这很烦人,因为我已经考虑并复核了你所有的建议。过去几个小时它一直在工作,所以我正在尝试重新创建它。不过,感谢您的时间。我很感激。
    【解决方案2】:

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

    【讨论】:

    • 我已经尝试过你的建议,但过去几个小时它运行良好,所以我不知道它是否有任何效果。我想了解的是随机性 - 命名冲突不会阻止在每个请求期间发生导入吗?另外,我在使用开发服务器时从来没有遇到过问题,只有 nginx。也许我应该用不同的措辞来强调这个问题。这一切都非常令人沮丧。谢谢。
    • 抱歉,这个问题的答案需要比我更聪明的人。我完全对它的随机性感到沮丧。当看到计算机的“随机”行为时要记住的是,它几乎总是你搞砸了。计算机不是随机的。
    • 哈哈。很公平。我隐约记得在某个地方读到过关于糟糕的程序员将错误归咎于恶意的文章,所以我会尽量记住这一点。还是谢谢。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2015-07-08
    • 2016-01-26
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多