【问题标题】:TemplateSyntaxError Caught ImportError while rendering: cannot import name prepare_lookup_valueTemplateSyntaxError Caught ImportError while rendering: cannot import name prepare_lookup_value
【发布时间】:2013-10-01 08:09:33
【问题描述】:

我对 Python (2.7) 和 Django (1.3.1) 还是很陌生,我不确定下一步应该在哪里调试这个问题。一点背景知识,这个应用程序在我的生产环境中运行得很好,该环境在运行 Ubuntu 的 EC2 实例上。我无法在运行 Mountain Lion 的开发机器上运行它。我遵循了看似标准的做法,并使用 virtualenv 将所有内容保持在沙盒中。

尝试渲染这条非常无害的线时发生错误:

<meta property="facebook:login_url" content="{% url socialauth_begin 'facebook' %}" />

抛出的异常:

Exception Value: Caught ImportError while rendering: cannot import name prepare_lookup_value
Exception Location: /dev/Sites/whattest/env/lib/python2.7/site-packages/grappelli/views/related.py in <module>, line 15

line 15: from django.contrib.admin.util import prepare_lookup_value

我认为这是某种路径问题,但目前我不知道在哪里/如何追踪它。

【问题讨论】:

  • python -c "from django.contrib.admin.util import prepare_lookup_value" 在 venv 中为您提供了什么?
  • 你不应该真正使用 Django 1.3 - 它已经过时两年了。
  • python -c "from django.contrib.admin.util import prepare_lookup_value" 给我ImportError: cannot import name prepare_lookup_value

标签: python django django-grappelli


【解决方案1】:

当前版本的 django-grappelli 兼容 Django 1.4 和 1.5;所以我假设由 django-grapelli 导入的 django.contrib.admin.util.prepare_lookup_value 在 Django 1.3 中根本不可用。

而且无论如何,我不明白为什么有人会用这么旧版本的 Django 开始新事物,除非是出于遗留原因。

更新: 实际上,这个确切的问题似乎并非如此——prepare_lookup_value 于 2011 年推出,1.3 于 2013 年发布,由 git blame 决定。但是,该函数的位置已从 django.contrib.{util to utils} 更改,并且您的代码正在尝试导入 django.contrib.admin.util.prepare_lookup_value

由于您似乎使用的是旧版本的(至少某些)软件包,我建议您将 venv 中的所有软件包(包括 django-grapelli)升级到最新版本,然后查看问题是否仍然存在。

【讨论】:

  • 这基本上使我走上了正确的道路,即尽管使用了virutalenv 并使用了 requirements.txt 文件来安装所有东西,但我仍然有几个不同的软件包的不同版本。在弄清楚问题所在之前,我一直拒绝升级所有软件包,所以现在我会去做。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 2016-05-16
  • 2018-10-27
  • 2020-07-16
  • 2019-06-10
相关资源
最近更新 更多