[英]Django TemplateSyntaxError: current transaction is aborted, what does this exception mean? Does postgresql 8.4 work fine with django?
錯誤的全文是:
在/的TemplateSyntaxError
渲染時捕獲異常:當前事務被中止,命令被忽略直到事務塊結束
我最近重新安裝了計算機上的所有軟件。 以前用過的代碼沒問題。 它在朋友的計算機和開發服務器上仍然沒有問題。
我唯一能想到的,可能已經改變的是postgresql服務器版本(我實際上並不確定我是否嘗試在我的舊安裝上運行8.4或者沒有 - 它絕對適用於8.3)。 有人能夠確認Django有postgresql 8.4的問題和/或有任何提示,為什么我有這些錯誤?
為了回應Dominic ......這不僅僅發生在一個頁面或一個標簽上(雖然有些頁面似乎沒問題)。 導致錯誤的標簽和變量的唯一共同點是它們碰巧在途中的某個地方訪問數據庫(盡管並非所有訪問數據庫的標簽都會導致錯誤)。 此外,相同的代碼不會在其他計算機上創建TemplateSyntaxError。
如果我刪除了發生錯誤的變量或自定義模板標記,那么這就是發生的事件鏈:
Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 279, in run self.result = application(self.environ, self.start_response) File "/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 651, in __call__ return self.application(environ, start_response) File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 245, in __call__ response = middleware_method(request, response) File "/usr/lib/python2.6/site-packages/debug_toolbar/middleware.py", line 90, in process_response response.content = replace_insensitive(smart_unicode(response.content), u'', smart_unicode(self.debug_toolbars[request].render_toolbar() + u'')) File "/usr/lib/python2.6/site-packages/debug_toolbar/toolbar/loader.py", line 72, in render_toolbar 'BASE_URL': self.request.META.get('SCRIPT_NAME', ''), File "/usr/lib/python2.6/site-packages/django/template/loader.py", line 108, in render_to_string return t.render(context_instance) File "/usr/lib/python2.6/site-packages/django/test/utils.py", line 29, in instrumented_test_render return self.nodelist.render(context) File "/usr/lib/python2.6/site-packages/django/template/__init__.py", line 779, in render bits.append(self.render_node(node, context)) File "/usr/lib/python2.6/site-packages/django/template/debug.py", line 71, in render_node result = node.render(context) File "/usr/lib/python2.6/site-packages/django/template/defaulttags.py", line 155, in render nodelist.append(node.render(context)) File "/usr/lib/python2.6/site-packages/django/template/defaulttags.py", line 243, in render return self.nodelist_true.render(context) File "/usr/lib/python2.6/site-packages/django/template/__init__.py", line 779, in render bits.append(self.render_node(node, context)) File "/usr/lib/python2.6/site-packages/django/template/debug.py", line 81, in render_node raise wrapped TemplateSyntaxError: Caught an exception while rendering: current transaction is aborted, commands ignored until end of transaction block Original Traceback (most recent call last): File "/usr/lib/python2.6/site-packages/django/template/debug.py", line 71, in render_node result = node.render(context) File "/usr/lib/python2.6/site-packages/django/template/debug.py", line 87, in render output = force_unicode(self.filter_expression.resolve(context)) File "/usr/lib/python2.6/site-packages/django/template/__init__.py", line 546, in resolve obj = self.var.resolve(context) File "/usr/lib/python2.6/site-packages/django/template/__init__.py", line 687, in resolve value = self._resolve_lookup(context) File "/usr/lib/python2.6/site-packages/django/template/__init__.py", line 722, in _resolve_lookup current = current() File "/usr/lib/python2.6/site-packages/debug_toolbar/panels/template.py", line 64, in content pformat(k(self.request))) for k in get_standard_processors() File "/usr/lib/python2.6/site-packages/django/core/context_processors.py", line 27, in auth 'messages': user.get_and_delete_messages(), File "/usr/lib/python2.6/site-packages/django/contrib/auth/models.py", line 263, in get_and_delete_messages for m in self.message_set.all(): File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 106, in _result_iter self._fill_cache() File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 692, in _fill_cache self._result_cache.append(self._iter.next()) File "/usr/lib/python2.6/site-packages/django/db/models/query.py", line 238, in iterator for row in self.query.results_iter(): File "/usr/lib/python2.6/site-packages/django/db/models/sql/query.py", line 287, in results_iter for rows in self.execute_sql(MULTI): File "/usr/lib/python2.6/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql cursor.execute(sql, params) File "/usr/lib/python2.6/site-packages/debug_toolbar/panels/sql.py", line 91, in execute return self.cursor.execute(sql, params) InternalError: current transaction is aborted, commands ignored until end of transaction block
該異常意味着某些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與Postgres使用事務的方式可能需要考慮一些因素。 在這里閱讀:
快速回答通常是通過添加以下命令打開數據庫級自動提交:
'OPTIONS': {'autocommit': True,}
到你的數據庫設置。 但值得仔細閱讀並了解首席執行官。
羅洛。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.