【问题标题】:What is causing the following template error 'Invalid block tag: 'blocktrans', expected 'elif', 'else' or 'endif'? [duplicate]是什么导致以下模板错误“无效的块标签:'blocktrans'、预期的'elif'、'else'或'endif'? [复制]
【发布时间】:2013-03-21 12:37:05
【问题描述】:

是什么导致了以下模板错误?

In template /var/www/userreg/tagging/templates/registration/login.html, error at line 153

Invalid block tag: 'blocktrans', expected 'elif', 'else' or 'endif'
   143 : 
   144 : 
   145 :    <td>
   146 : 
   147 :    </td>
   148 : </tr>
   149 : </table>
   150 : </td>
   151 :    <td style="text-align:center;">
   152 :        {% if socialaccount.providers  %}
   153 : <p> {% blocktrans with site.name as site_name %} Please sign in with your
 existing acounts through  {% endblocktrans %}
   154 : 
   155 : <div class="socialaccount_ballot">
   156 : 
   157 :   <ul class="socialaccount_providers">
   158 :     {% include "socialaccount/snippets/provider_list.html" %}
   159 :   </ul>
   160 : 
   161 :   <div class="login-or">{% trans 'or' %}</div>
   162 :
   163 : </div>
Exception Type: TemplateSyntaxError at /accounts/login/
Exception Value: Invalid block tag: 'blocktrans', expected 'elif', 'else' or 'endif'

环境:

Request Method: GET
Django Version: 1.5
Python Version: 2.7.3

已安装的应用程序:

 ('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'registration',
 'django.contrib.humanize',
 'allauth',
 'allauth.account',
 'allauth.socialaccount',
 'allauth.socialaccount.providers.facebook',
 'allauth.socialaccount.providers.google',
 'allauth.socialaccount.providers.linkedin')

已安装的中间件:

 ('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')

我的模板

{% extends "base.html" %}

{% load i18n %}   
{% load account %}   
{% load url from future %}

{% block title %}Log in{% endblock %}

{% block content_header %}Log in{% endblock %}

{% block main_content %}    
    {% if socialaccount.providers  %}    
    <p> 
       {% blocktrans with site.name as site_name %}
       Please sign in with your existing acounts through     
       {% endblocktrans %}

       <div class="socialaccount_ballot"> 
          <ul class="socialaccount_providers">
          {% include "socialaccount/snippets/provider_list.html" %}    
          </ul>

          <div class="login-or">{% trans 'or' %}</div>  
       </div>

       {% include "socialaccount/snippets/login_extra.html" %}

       {% blocktrans %}    
       <a href="{{ signup_url }}">sign up</a> for a {{site_name}} account and sign in below:
       {% endblocktrans %}
    </p>   
    {% endif %}         
{% endblock %}

【问题讨论】:

  • 发布标记(模板)和异常......这就是我们所需要的。
  • 看来,如果你在第 152 行有它没有关闭(基于我所看到的)。也许您应该尝试在末尾添加 {% endif %}
  • 下次请自行格式化您的问题。我也想知道这是否不是太本地化。
  • 你的模板中有{% load i18n %}吗?
  • 我给了 {%endif%},但它仍然给出错误

标签: django django-templates


【解决方案1】:

您在以下位置定义了site_name

{% blocktrans with site.name as site_name %}
    Please sign in with your existing acounts 
{% endblocktrans %}

你没有引用它的地方。

但是你引用了site_name

{% blocktrans %}
    <a href="{{ signup_url }}">sign up</a> for a {{site_name}} account and sign in below:
{% endblocktrans %}

您没有在打开 blocktrans 标记时声明和定义 site_name

从你的回溯中我可以看到,django 没有抱怨,所以socialaccount/snippets/provider_list.htmlsocialaccount/snippets/login_extra.html 可能会发出错误。

【讨论】:

    【解决方案2】:

    只是{% endblock %},而不是{% endblocktrans %}

    【讨论】:

    • 如果我单独给出 {% endblock %} 它会给出更多错误,如下所示: TemplateSyntaxError at /accounts/login/ 'blocktrans' doesn't allow other block tags (see u'endblock')里面
    • 你是对的,我的错。检查上一个答案。他想说的是,在您关闭第一个 blocktrans 后,您不能使用 site_name。当你使用它时,你必须像这样再次定义它。尝试将所有内容放在一个 blocktrans 中而不是两个。
    猜你喜欢
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2015-07-08
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多