Django TemplateSyntaxError: current transaction is aborted,这个异常是啥意思? postgresql 8.4 可以与 django 一起正常工

Posted

技术标签:

【中文标题】Django TemplateSyntaxError: current transaction is aborted,这个异常是啥意思? postgresql 8.4 可以与 django 一起正常工作吗?【英文标题】:Django TemplateSyntaxError: current transaction is aborted, what does this exception mean? Does postgresql 8.4 work fine with django?Django TemplateSyntaxError: current transaction is aborted,这个异常是什么意思? postgresql 8.4 可以与 django 一起正常工作吗? 【发布时间】:2010-12-24 10:56:24 【问题描述】:

错误全文为:

TemplateSyntaxError at /

渲染时遇到异常: 当前交易被中止, 命令被忽略直到结束 交易区块

我最近在我的计算机上重新安装了所有软件。以前的代码可以正常工作。它在朋友的计算机和开发服务器上仍然可以正常工作。

我唯一能想到的可能已经改变的是 postgresql 服务器版本(实际上我不确定我是否尝试在旧安装的 8.4 上运行它 - 它肯定在 8.3 上运行)。 是否有人能够确认 Django 在 postgresql 8.4 上存在问题和/或对我为什么会出现这些错误有任何提示?

编辑 1

回应多米尼克... 这不会只发生在一个页面或一个标签上(尽管有些页面似乎没问题)。导致错误的标签和变量的唯一共同点是它们碰巧在途中访问数据库(尽管并非所有访问数据库的标签都会导致错误)。此外,相同的代码不会在其他计算机上创建 TemplateSyntaxError。

如果我删除了导致错误的变量或自定义模板标签,那么这就是发生的事件链:

    我删除了可能导致错误的变量或标记并刷新页面。 Django 选择了一个不同的变量或标签,并出现同样的错误,所以我一直删除它们。 一旦导致错误的所有变量和标签都被删除,我将停止获取正确的错误页面。我得到一个带有以下回溯的纯白页面:
Traceback(最近一次调用最后一次):

  运行中的文件“/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py”,第 279 行
    self.result = application(self.environ, self.start_response)

  __call__ 中的文件“/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py”,第 651 行
    返回 self.application(environ, start_response)

  __call__ 中的文件“/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py”,第 245 行
    response = middleware_method(请求,响应)

  文件“/usr/lib/python2.6/site-packages/debug_toolbar/middleware.py”,第 90 行,在 process_response
    response.content = replace_insensitive(smart_unicode(response.content), u'', smart_unicode(self.debug_toolbars[request].render_toolbar() + u''))

  文件“/usr/lib/python2.6/site-packages/debug_toolbar/toolbar/loader.py”,第 72 行,在 render_toolbar
    'BASE_URL': self.request.META.get('SCRIPT_NAME', ''),

  文件“/usr/lib/python2.6/site-packages/django/template/loader.py”,第 108 行,在 render_to_string
    返回 t.render(context_instance)

  Instrumented_test_render 中的文件“/usr/lib/python2.6/site-packages/django/test/utils.py”,第 29 行
    返回 self.nodelist.render(context)

  文件“/usr/lib/python2.6/site-packages/django/template/__init__.py”,第 779 行,在渲染中
    bits.append(self.render_node(节点,上下文))

  文件“/usr/lib/python2.6/site-packages/django/template/debug.py”,第 71 行,在 render_node
    结果 = node.render(上下文)

  文件“/usr/lib/python2.6/site-packages/django/template/defaulttags.py”,第 155 行,在渲染中
    nodelist.append(node.render(context))

  文件“/usr/lib/python2.6/site-packages/django/template/defaulttags.py”,第 243 行,在渲染中
    返回 self.nodelist_true.render(context)

  文件“/usr/lib/python2.6/site-packages/django/template/__init__.py”,第 779 行,在渲染中
    bits.append(self.render_node(节点,上下文))

  文件“/usr/lib/python2.6/site-packages/django/template/debug.py”,第 81 行,在 render_node
    提高包裹

TemplateSyntaxError:渲染时捕获异常:当前事务被中止,命令被忽略,直到事务块结束


原始回溯(最近一次通话最后):
  文件“/usr/lib/python2.6/site-packages/django/template/debug.py”,第 71 行,在 render_node
    结果 = node.render(上下文)
  文件“/usr/lib/python2.6/site-packages/django/template/debug.py”,第 87 行,在渲染中
    输出 = force_unicode(self.filter_expression.resolve(context))
  解析中的文件“/usr/lib/python2.6/site-packages/django/template/__init__.py”,第 546 行
    obj = self.var.resolve(context)
  文件“/usr/lib/python2.6/site-packages/django/template/__init__.py”,第 687 行,解决
    值 = self._resolve_lookup(上下文)
  _resolve_lookup 中的文件“/usr/lib/python2.6/site-packages/django/template/__init__.py”,第 722 行
    当前 = 当前()
  文件“/usr/lib/python2.6/site-packages/debug_toolbar/panels/template.py”,第 64 行,内容
    pformat(k(self.request))) for k in get_standard_processors()
  文件“/usr/lib/python2.6/site-packages/django/core/context_processors.py”,第 27 行,在 auth
    '消息': user.get_and_delete_messages(),
  文件“/usr/lib/python2.6/site-packages/django/contrib/auth/models.py”,第 263 行,在 get_and_delete_messages
    对于 self.message_set.all() 中的 m:
  _result_iter 中的文件“/usr/lib/python2.6/site-packages/django/db/models/query.py”,第 106 行
    self._fill_cache()
  _fill_cache 中的文件“/usr/lib/python2.6/site-packages/django/db/models/query.py”,第 692 行
    self._result_cache.append(self._iter.next())
  文件“/usr/lib/python2.6/site-packages/django/db/models/query.py”,第 238 行,在迭代器中
    对于 self.query.results_iter() 中的行:
  文件“/usr/lib/python2.6/site-packages/django/db/models/sql/query.py”,第 287 行,在 results_iter
    对于 self.execute_sql(MULTI) 中的行:
  文件“/usr/lib/python2.6/site-packages/django/db/models/sql/query.py”,第 2369 行,在 execute_sql
    cursor.execute(sql,参数)
  文件“/usr/lib/python2.6/site-packages/debug_toolbar/panels/sql.py”,第 91 行,在执行中
    返回 self.cursor.execute(sql, params)
InternalError:当前事务被中止,命令被忽略直到事务块结束

【问题讨论】:

第一点很重要——你有一个TemplateSyntaxError。向我们展示您的视图代码和任何被渲染的模板。 编辑了更多信息... 【参考方案1】:

如果您要从不同的数据库迁移,请注意,使用 Postgres 的 Django 使用事务的方式可能需要牢记一些注意事项。在这里阅读:

http://docs.djangoproject.com/en/dev/topics/db/transactions/?from=olddocs#handling-exceptions-within-postgresql-transactions

快速的答案通常是通过添加以下内容来打开数据库级别的自动提交:

'OPTIONS': 'autocommit': True,

到您的数据库设置。但值得一读并了解 coo。

罗洛。

【讨论】:

【参考方案2】:

该异常意味着正在执行的某些 SQL 中存在错误。由于 Django 在数据库事务中运行所有 SQL,因此错误后正在执行的所有 SQL 都会被忽略。所以:

BEGIN;
SELECT * FROM table;
SELECT missing_column FROM table WHERE id = 1; -- generates an error because the column is missing
SELECT * FROM another_table; -- this statement and all following statements get ignored until the next COMMIT;
COMMIT;

要找出问题所在,请找到您的 PostgreSQL 日志文件并运行 tail -f /path/to/postgresql_error.log。然后刷新页面。您应该会在日志文件中看到错误。

【讨论】:

这是正确的。 Django 在将 SQL 错误推送给用户方面非常糟糕,尤其是通过 psycopg2。相反,您会收到此交易错误,并且必须深入挖掘实际问题。 谢谢!非常有帮助,我终于知道该错误可能来自哪里......

以上是关于Django TemplateSyntaxError: current transaction is aborted,这个异常是啥意思? postgresql 8.4 可以与 django 一起正常工的主要内容,如果未能解决你的问题,请参考以下文章

Django初识

Django之路

Django系列

django 错误

mac电脑安装django ,运行django报错解决

Django 大神带你飞系列~走进Django