如何在Python Django Shell中使用自定义模块中的函数

时间:2019-01-29 14:31:26

标签: python django

我有一个名为my_functions.py的python文件,其中包含以下代码:

from core.models import Blog

def news(): 
    b = Blog(name='New Blog', tagline='All the latest news.')
    b.save()

我在django中的主要应用文件夹称为core,我将python文件放在了其中。在外壳中,我可以执行导入:from core import my_functions 但是,当我尝试运行代码AttributeError: module 'core.my_functions' has no attribute 'news'时出现错误my_functions.news()。 如何在外壳中运行news函数?

我的树结构如下:

core
    -__init__.py
    -admin.py
    -apps.py
    -models.py
    -my_functions.py
    -tests.py
    -urls.py
    -views.py

其他所有内容都可以正常使用,但是我似乎无法弄清楚为什么我不能执行此简单的导入和运行功能。我正在使用VSCode。

2 个答案:

答案 0 :(得分:1)

确保__init__.py目录中有一个core文件。然后:

from core.my_functions import news

如果对项目中的任何文件进行更改,还必须重新启动Shell,因为django shell将在启动时将所有模块加载到内存中。

答案 1 :(得分:0)

创建文件并编写函数。在我的情况下是:

# /home/$(USER)/repos/bo/apps/base/queries.py
# "apps.base", added to INSTALLED_APPS list in settings.py

from apps.base.models import Player
from core.models import Blog

def news(): 
    b = Blog(name='New Blog', tagline='All the latest news.')
    b.save()
    return b


def count_player_overs():
    all_playerovers = Player.objects.all()
    count_all_playerovers = all_playerovers.count()
    return count_all_playerovers


print('count_all_playerovers: {}'.format(count_player_overs()))
print('saved news object: {}'.format(news()))

# this folder has manage.py
cd /home/$(USER)/repos/bo/

并运行:

./manage.py shell -c "from apps.base import queries;"

结果:

count_all_playerovers: 376

saved news object: New Blog

您可以更改代码并再次运行./manage.py shell -c "from apps.base import queries;",它将重新导入模块并使用所有更改运行函数。