代码之家  ›  专栏  ›  技术社区  ›  Keith John Hutchison

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

  •  1
  • Keith John Hutchison  · 技术社区  · 6 年前

    给定一个名为mattermost的django应用程序,它有一个名为Channel的模型,我们可以这样做。

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

    我希望能做这样的事

    import mattermost
    mattermost.channels.list
    

    我尝试在mattermost所在的文件夹中添加channels.py和def list():函数/ 初始 .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)
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Keith John Hutchison    6 年前

    尝试 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]: 
    

    很接近。

        2
  •  0
  •   Keith John Hutchison    6 年前

    我发现你可以在mattermost/\u 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()
    

    它为每个最底层的通道产生输出。