我有一个名为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。
答案 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;"
,它将重新导入模块并使用所有更改运行函数。