在 Django 模板中出现了 "TemplateSyntaxError Invalid block tag: 'trans'" 错误。

18
在运行runserver命令后,我遇到了以下错误:

TemplateSyntaxError at /questions/ Invalid block tag: 'trans'

有人知道是什么原因吗?
这是我的模板语法:
{% extends "two_column_body.html" %}
{# 
    this template is split into several
    blocks that are included here
    the blocks are within directory templates/main_page
    relative to the skin directory

    there is no html markup in this file
#}
<!-- questions.html -->
{% block forejs %}
    {% include "main_page/custom_head_javascript.html" %}
{% endblock %}
{% block title %}{% spaceless %}{% trans %}Questions{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
    {% include "main_page/tab_bar.html" %}
    {% include "main_page/headline.html" %}
    {# ==== BEGIN: main_page/content.html === #}
    <div id="question-list">
        {% include "main_page/questions_loop.html" %}
    </div>
    {# ==== END: main_page/content.html === #}
    {% include "main_page/paginator.html" %}
{% endblock %}
{% block sidebar %}
    {% include "main_page/sidebar.html" %}
{% endblock %}
{% block endjs %}
    <script type="text/javascript">
        {# cant cache this #}
        askbot['settings']['showSortByRelevance'] = {{ show_sort_by_relevance|as_js_bool }};
        askbot['messages']['questionSingular'] = '{{ settings.WORDS_QUESTION_SINGULAR|escapejs }}';
        askbot['messages']['answerSingular'] = '{{ settings.WORDS_ANSWER_SINGULAR|escapejs }}';
        askbot['messages']['acceptOwnAnswer'] = '{{ settings.WORDS_ACCEPT_OR_UNACCEPT_OWN_ANSWER|escapejs }}';
        askbot['messages']['followQuestions'] = '{{ settings.WORDS_FOLLOW_QUESTIONS|escapejs }}';
    </script>
    {% include "main_page/javascript.html" %}
    {% include "main_page/custom_javascript.html" %}
{% endblock %}
<!-- end questions.html -->

6
你是否忘记了写 {% load i18n %} - Henrik Andersson
5个回答

40

{% trans %}问题{% endtrans %} 的格式不正确。

{% load i18n %} 应该放在你的模板顶部,或者任何使用翻译的扩展模板中。

你可以使用 {% trans "问题。" %}

如果你要使用块,它们需要按照以下格式:

{% blocktrans %}{{ value2translate }}{% endblocktrans %}

更多信息在这里


你有检查其他模板吗?能否提供调试文件的输出结果? - chirinosky
1
在当前模板的顶部以及所有扩展模板中,应该使用{% load i18n %}!同时,必须使用{% blocktrans %}Qusetion{% endblocktrans %}代替{% rans %}Qusetion{% endtrans %}。感谢您的帮助! - Mazdak
很高兴你已经解决了。我会更新答案,以澄清{% load i1in %}这部分。 - chirinosky
链接已失效,请编辑或删除参考链接。 - Ibo

5

可能您应该使用{% blocktrans %}问题{% endblocktrans %},并且您忘记在模板顶部放置{% load i18n %}


尝试使用 {% blocktrans %}Questions{% endblocktrans %} 而不是 {% trans %}Questions{% endtrans %} 或者 {% trans "Questions" %},并移除 {% endtrans %} - Yuriy Stetskiv

3
这是因为您在此模板中没有加载 i18n。{% load i18n %} 您必须在每个模板中添加它。

2

在扩展模板代码的开头,您必须添加以下代码:{% load i18n %},这样你就可以使用trans标签:

{% extends 'home/base.html' %}

{% block title %}INICIO{% endblock %}
{% load i18n %}


  {% block opcionesMenu %}
<!-- =====START====== -->
            <a href="#sTop" class="subNavBtn">{% trans "Inicio"  %}</a>
            <a href="#s1" class="subNavBtn">{% trans "Proyectos" %}</a>
            <a href="#s2" class="subNavBtn">{% trans "Diseño Web" %}</a>
            <a href="#s3" class="subNavBtn">{% trans "Marketing" %}</a>
            <a href="#s4" class="subNavBtn">{% trans "Conocenos" %}</a>
            <a href="#s5" class="subNavBtn">{% trans "Contacto" %}</a>
<!-- =====END ====== -->
 {% endblock %}

0
除了其他答案之外,您需要在{% extends %}之后放置{% load i18n %}才能像下面所示使用{% trans %}或{% translate %}:
{% extends "two_column_body.html" %}
{% load i18n %}

{% extends %}模板继承 中有如下解释:

  • 如果您在模板中使用 {% extends %},它必须是该模板中的第一个模板标签。否则,模板继承将无法正常工作。

因此,如果您像下面这样在 {% extends %} 之前放置了 {% load i18n %}

{% load i18n %}
{% extends "two_column_body.html" %}

然后,出现以下错误:

<ExtendsNode: extends "..."> 必须是模板中的第一个标签。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接