【问题标题】:Confusion about django app's name关于 django 应用程序名称的困惑
【发布时间】:2010-10-03 03:45:01
【问题描述】:

我是按照 django 书和文档学习 Django 的。在 django book 示例中,该项目名为 mysite,并且该项目中有一个名为 book 的应用程序。所以在这种情况下,应用程序被称为“书”。我没问题。

我的困惑出现在可重复使用的应用程序面前。可重用的应用程序通常驻留在项目之外。比如django-registration只有一个独立的文件夹“registration”。那么它的应用名称是什么? “注册”对吧?

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

我知道你们中的大多数人会说“为什么你对应用程序名称很着迷?只要确保包结构正确并且 django 可以毫无问题地运行。”是的,在大多数情况下,应用名称只不过是一个名称。一种情况除外:指定 AUTH_PROFILE_MODULE。正如文档所解释的,

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

  1. 应用程序的名称(大小写 敏感的)其中用户配置文件 模型被定义(换句话说, 传递给 manage.py 的名称 startapp 来创建应用程序)。
  2. 型号名称(不区分大小写 敏感)类。

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

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

【问题讨论】:

    标签: python django


    【解决方案1】:

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

    如果您看到应用或模块名称有不同的大小写或其他修改,这并不能反映实际的应用或模块名称。相反,您看到的是已知 Django 管理应用程序在某些情况下会执行的一些“漂亮打印”的结果。这只是为了展示。

    【讨论】:

    • 我已经用 Django 玩了一段时间了。我想我现在知道答案了。应用程序名称是您的模块所在的叶包名称。所以对于像“a.b.c”这样的包,c 是应用名称。
    【解决方案2】:

    我的困惑出现在可重复使用的应用程序面前。可重用的应用程序通常驻留在项目之外。比如django-registration只有一个独立的文件夹“registration”。那么它的应用名称是什么? “注册”对吧?

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

    • 在应用程序列表中您仅使用应用程序名称:registration
    • 在其他地方你会使用import registration

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

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

    更新

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

    【讨论】:

    • 但是porject文件夹也是一个包。如果应用程序驻留在它下面,我必须像“project.app.module”那样进行导入,我认为这是不优雅的,因为应用程序没有理由知道项目名称。所以我喜欢将应用程序放在顶层包上。但是 Pydev 除了项目下的子文件夹之外别无选择。必须使用 Pydev 做一些手动工作:(。
    【解决方案3】:

    当你以独立包的形式部署和应用时,它只是另一个Python包,恰好实现了Django视图、模板、模板标签等。因此,Django的搜索路径就是Python搜索路径本身。这就是为什么人们说“只要确保包结构正确,django 可以正常运行。”

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

    【讨论】:

      【解决方案4】:

      应用名称只是 Python 模块的名称。仅此而已。

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

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

      【讨论】:

        猜你喜欢
        • 2021-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-29
        • 1970-01-01
        相关资源
        最近更新 更多