Django模板中的"TemplateSyntaxError Invalid block tag: 'trans'"错误

18 投票
5 回答
35317 浏览
提问于 2025-04-18 11:19

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

TemplateSyntaxError at /questions/ 无效的块标签: '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 -->

5 个回答

0

除了其他的回答之外,如果你想在模板中使用 {% trans %} 或 {% translate %},你需要在 {% extends %} 之后加上 {% load i18n %},就像下面这样:

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

{% extends %} 的用法可以在 模板继承 中找到,具体说明如下:

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

所以,如果你把 {% load i18n %} 放在 {% extends %} 之前,就像下面这样:

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

那么就会出现下面的错误:

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

2

在你的扩展模板代码的开头,你必须加上这行代码:{% load i18n %},这样你才能使用翻译标签。

{% 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 %}
3

这是因为你在这个模板里没有加载国际化功能。你需要在每个模板里加上{% load i18n %}这一行。

5

你可能应该使用 {% blocktrans %}Questions{% endblocktrans %},而且你忘记在模板的顶部加上 {% load i18n %}

40

{% trans %}Questions{% endtrans %} 这个写法是不对的。

{% load i18n %} 这个命令应该放在你的模板最上面,或者放在任何使用翻译的扩展模板里。

你可以用 {% trans "Questions." %} 这个写法。

如果你要使用块(blocks),它们需要按照下面的格式来写:

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

更多信息可以在 这里 找到。

撰写回答