【问题标题】:Call an external app's view in Django在 Django 中调用外部应用程序的视图
【发布时间】:2014-10-28 16:23:58
【问题描述】:

我有一个名为“publications”的已安装应用程序,我正在尝试从我的 Django 项目中调用“publications”视图。我不断收到以下错误:

from citations_app import views as citations_app_views
   ImportError: No module named citations_app

所以,我无法“加载”外部应用的视图,如果可以的话,我不确定我是否正确调用它。我正在尝试使用我的“display_info”视图函数来获取数据列表,然后将该数据传递给外部应用程序的“list_view”视图函数。 这是我的 citations.py 视图文件:

from django.db.models import get_app
citations_app = get_app("publications")
from citations_app import views as citations_app_views
from citations_app_views import list as list_view

def display_info(request):
    citations = request.GET.getlist('citation-selection')
    return list_view(request, citations)

知道为什么会出现导入错误,以及我是否正确调用了“list_view”视图函数? 谢谢!!

目录结构:

MyApp1/
  models/ 
    publications.py
    citations.py
    items.py
  views/
    publications.py
    citations.py
    items.py
MyApp2/
Publications/ (not physically present at this location but installed as part of requirements.txt file)

我在 view/items.py 中工作。

【问题讨论】:

  • 您似乎没有任何名为 citations_app 的应用...您是否在 INSTALLED_APPS 的 settings.py 中添加了 citations_app ??
  • 请显示您的目录结构。你真的有一个名为“citations_app”的应用程序,而不仅仅是“引文”吗?请注意,后面的行完全没有意义,您应该删除它。
  • 安装的应用实际上是“出版物”。我正在尝试通过调用 get_app("publications") 导入“出版物”并将其保存为 citations_app。 (我已经在 INSTALLED_APPS 中包含了应用“出版物”)...
  • 你为什么使用get_app()——一个已被弃用的私有API——而不是Python的常规导入机制(from publications import views as citations_app_views)?
  • 我正在使用 get_app() 因为我在视图和模型目录中都有名为 Publications.py 的文件(与已安装的发布应用程序无关),我无法让这些常规导入工作。我认为这是一个命名问题,但无法弄清楚。因此, citations_app = get_app("publications") 在我的 models/items.py 文件中可以正确导入和使用模型,但在我的 views/items.py 中无法获取视图。在views/items.py 中,如果我尝试from publications import views as citations_app_views,我会得到ImportError: cannot import name views

标签: python django django-views


【解决方案1】:

忘记get_app(),你只需要让你的目录结构和导入路径正常工作。

听起来您是在说问题在于本地 publications.py 正在屏蔽 publications 应用程序?那么,您必须使用 Python 2,因为在 Python 3 中不再可能出现这种歧义。要消除 Python 2 中的歧义,请将 from __future__ import absolute_import 添加到文件顶部。一旦你这样做了,from publications import ... 将始终引用顶级应用程序。要访问本地 publications.py,您将使用 from .publications import ...from myapp1.models.publications import ...

如果您想了解有关绝对/相对导入问题的更多信息,请参阅PEP 328

【讨论】:

  • 谢谢,谢谢!!是的,我使用的是 Python 2.7:我知道它没有“抓取”正确的“出版物”,但我不明白为什么,因为外部出版物应用程序位于不同的目录中。哇,花了几天的时间试图弄清楚这一点 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多