Django自定义模板标签:打包应用程序的ImportError

时间:2012-05-27 22:11:46

标签: python django django-templates

我正在编写自定义模板标签,用于可重复使用的django应用程序 我定义的标签是在同一个应用程序中引用模型,所以我需要导入它。

如果我将我的应用程序代码复制到django项目中,一切正常,但如果我使用distutils打包我的应用程序并通过pip或setup.py install安装它(因此应用程序代码被复制到site-packages中),我不能用它。

当尝试在模板标签模块中导入我的应用程序模型时,我得到一个ImportError。 提出错误的代码如下:

  

来自django导入模板
  import cms_fragments.models

     

register = template.Library()

引发的例外是:

  

ImportError引发加载cms_fragments.templatetags.cms_fragments_tags:没有名为models的模块

我很确定我的应用程序布局是正确的:

  

| -cms_fragments

     
    

| - 的 _ 初始化 _ 的.py
    | -models.py
    | -templatetags

         
      

| - 的 _ 初始化 _ 的.py
      | -cms_fragments_tags.py
      | -views.py

    
  

我看过所有与此相关的帖子,但我从来没有发现任何人在django项目中生成代码的应用程序与生活在site-packages中的代码之间存在差异。

任何提示?

1 个答案:

答案 0 :(得分:1)

我认为问题在于您导入/使用所需库的方式。如果您导入这样的“模型”,它应该可以工作:

from cms_fragments import models

但如果你发布使用这个“模型”包的代码片段会更好,因为我只是猜测你是如何使用它的。阅读你得到的错误,似乎是你试图像这样引用“模型”模块:

models.some_thing_inside_models...

但是当您像这样导入时:

import cms_fragments.models

你必须这样引用它:

cms_fragments.models.some_thing_inside_models...

Here是一些可以帮助您的文档,它解释了如何使用proyect目录树。