python / django,名称空间的根在哪里?

时间:2019-05-27 03:09:15

标签: python django python-3.x

来自php的名称空间始终在php中定义良好,通常使用composer的psr-4

https://getcomposer.org/doc/04-schema.md#psr-4

例如你有一个文件夹

src/Foo/Bar/Baz

然后您在composer.json文件中定义 src/Foo是命名空间Foo的起始位置

此后,按照惯例,所有子文件夹都是新的子命名空间,例如

src/Foo/Bar/Baz/MyClass.php变成

Foo.Bar.Baz.MyClass

说我想将实用程序python类放入我的django项目中,我想在所有django“应用程序”中使用

我将其放在哪里,以及如何正确定义名称空间?理解python中名称空间的透明方法是什么?

3 个答案:

答案 0 :(得分:3)

此文档中:

https://docs.djangoproject.com/en/2.2/ref/applications/#projects-and-applications

这是代码段:

A project’s root directory (the one that contains manage.py) is usually the container for all of a project’s applications which aren’t installed separately.

您可以在该目录下为实用程序创建选择的任何层次结构,这些层次结构可以符合python的package系统:

https://docs.python.org/3/tutorial/modules.html#packages

答案 1 :(得分:1)

在Python中,有一个模块搜索路径。可以从命令行使用PYTHONPATH环境变量对其进行初始化,并可以通过sys.path以编程方式对其进行访问。

默认情况下,用于启动Python解释器的脚本目录是搜索路径中的第一项。

python路径上的任何模块或软件包“启动新的名称空间”,以使用您的措辞。假设您的名为mysite的项目有一个名为polls的应用,并且具有以下结构:

mysite
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── utils.py
│   └── wsgi.py
├── polls
│   ├── __init__.py
│   ├── models.py
│   ├── utils.py
...

如果从python manage.py runserver开始,则软件包mysitepolls可用。

我想说项目范围mysite是项目范围的utils模块的好地方。因此,您可以在任何应用中执行import mysite.utils。如果它超出单个文件的范围,则可以将其变成子程序包,因此,您将拥有一个包含utils.py文件的utils目录,而不是__init__.py

以上结构使全局名称空间有些混乱。因此,有些人喜欢这样一种结构,其中所有应用程序都是项目包的子包,例如:

mysite
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   ├── utils.py
│   ├── wsgi.py
│   └── apps
│       └── polls
│           ├── __init__.py
│           ├── models.py
│           ├── utils.py
...

答案 2 :(得分:0)

如果要在应用程序中访问所需文件,可以将其添加到应用程序层次结构中。您可以直接将该文件夹保存在特定文件中,也可以使用import语句访问该文件。

例如:app / myfile

您可以从导入:。导入myfile 从应用程序导入myfile |直接在您需要这些文件的文件中