关于django应用程序名称的困惑

时间:2010-10-03 03:45:02

标签: python django

我按照django书和文件学习了Django。在django书的例子中,该项目被称为mysite,在这个项目中有一个叫做book的应用程序。所以在这种情况下,应用程序被称为“书”。我没问题。

我的混乱出现在可重用的应用程序面前。可重用的应用程序通常位于项目之外。例如,django-registration只有一个独立的文件夹“registration”。那它的应用名称是什么? “注册”,对吧?

如果是这种情况,那么应用程序命名是否存在一些不一致之处?在第一种情况下,app name似乎是项目下的文件夹名称(或子包名称),而在第二种情况下,app name是顶级包名称。

我知道你们大多数人都会说“为什么你们对应用程序名称感到厌烦?只要确保包装结构正确并且django可以毫无问题地运行。”是的,在大多数情况下,应用名称只是一个名称。除一次外:指定AUTH_PROFILE_MODULE。正如文件所解释的那样,

  

表示此型号是   给定站点的用户配置文件模型,   填写设置   带字符串的AUTH_PROFILE_MODULE   由以下项目组成,   用点分隔:

     
      
  1. 申请表的名称(案例   敏感的)用户个人资料   模型被定义(换句话说,   传递给manage.py的名称   startapp来创建应用程序)。
  2.   
  3. 模型的名称(不是案例   敏感的)。
  4.   

如果我将模型作为可恢复包中的用户配置文件,我必须知道应用程序名称才能正确指定AUTH_PROFILE_MODULE。

django是否使用某个路径搜索顺序来决定应用名称?

4 个答案:

答案 0 :(得分:1)

应用程序的名称是目录的名称,大写和全部,除非您在适当的__init__.py文件中进行额外的工作来更改名称。毕竟,Django应用程序只是Python模块,所有相同的规则都适用。

如果您看到具有不同大小写或其他修改的应用或模块名称,则不会反映实际的应用或模块名称。相反,你所看到的是一些“漂亮打印”的结果,Django管理员应用程序在某些情况下已知。这仅供显示。

答案 1 :(得分:1)

  

我的混乱出现在可重用的应用程序面前。可重用的应用程序通常位于项目之外。例如,django-registration只有一个独立的文件夹“registration”。那它的应用名称是什么? “注册”,对吧?

django-registration是项目名称。应用程序名称为registration

  • 在应用程序列表中,您只使用应用程序名称:registration
  • 在其他地方,您将使用import registration
  

如果是这种情况,那么应用程序命名是否存在一些不一致之处?在第一种情况下,app name似乎是项目下的文件夹名称(或子包名称),而在第二种情况下,app name是顶级包名称。

将项目视为一个简单的应用程序集合:您可以将应用程序存储为子文件夹,或将它们放在单独的文件夹中(必须包含在PYTHONPATH中)。在这两种情况下,应用程序名称都是相同的。

<强>更新

manage.py将PYTHONPATH添加到当前文件夹(因此您可以使用import app.module)和父文件夹(因此您可以使用project.settingsproject.urls)。 因此,如果您可以将Pydev配置为将项目文件夹添加到PYTHONPATH,那么您可以将应用程序导入为app.module,而与项目名称无关。

答案 2 :(得分:0)

当您将app和app作为独立包进行部署时,它只是另一个Python包,它恰好实现了Django视图,模板,模板标签等。因此,Django的搜索路径就是Python搜索路径本身。这就是人们说“只要确保包装结构正确并且django可以毫无问题地运行”的原因。

显然,如果包名与其他人的包冲突,你就会遇到问题......

答案 3 :(得分:0)

应用名称只是Python模块的名称。没什么。

python模块名称是模块根文件夹的案例名称,必须包含 init .py文件。

如果您想知道这个名称是什么,请转到您的site-packages文件夹并查找您的模块。