如何为django应用程序python模块添加属性



如果有一个名为mattermost的django应用程序,它有一个称为Channel的模型,我们可以做这样的事情。

import mattermost
for channel in Channel.objects.all():
print(channel)

我希望能够做一些类似的事情

import mattermost
mattermost.channels.list

我尝试在mattermost/init.py.的同一文件夹中添加带有def-list((:函数的channels.py

我得到以下错误。

In [7]: reload(mattermost)
Out[7]: <module 'mattermost' from '/home/csmu/mipgen-django/mattermost/__init__.py'>
In [8]: mattermost.channels.list
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-d4715777f4f1> in <module>()
----> 1 mattermost.channels.list
AttributeError: module 'mattermost' has no attribute 'channels'

如何为django应用程序python模块添加属性?

channels.py:的内容

import mattermost
def list():
for channel in mattermost.models.Channel.objects.all():
print(channel)

尝试 from mattermost import channels print(channels.list())

这导致:

In [1]: import mattermost
In [2]: mattermost.channels.list()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-249466f32547> in <module>()
----> 1 mattermost.channels.list()
AttributeError: module 'mattermost' has no attribute 'channels'
In [3]: from mattermost import channels
In [4]: mattermost.channels.list()
list.stub
In [5]: 

这是接近的。

我发现您可以通过将以下内容添加到mattermost/__init__py 来实现这一点

#!/usr/bin/env python
import os, pkgutil
__all__ = list(module for _, module, _ in 
pkgutil.iter_modules([os.path.dirname(__file__)]))

则以下工作

import mattermost
from mattermost import *
mattermost.channels.list()

其产生每个最重要信道的输出。

最新更新