我在编写一个 python 脚本时遇到困难,该脚本需要一个 .txt 文件目录并将它们加载到 Django 项目中使用的数据库中。根据要求,python 脚本需要位于与 api (我的 django 目录)不同的目录中。
这是我目前的项目结构:
Main-Project/
database/
text-script.py
text-files/
example-file.txt
django/
django/
settings.py
snippets/
models.py
我的 text-script.py 文件如下所示:
import os
import sys
import django
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
sys.path.append(parent_dir)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django.django.settings')
django.setup()
from django.snippets.models import Snippet
def import_articles(directory):
for filename in os.listdir(directory):
if filename.endwith('.txt'):
with open(os.path.join(directory, filename), 'r') as file:
content = file.read()
Snippet.objects.create(filename=filename, content=content)
if __name__ == '__main__':
text_dir = os.path.join(current_dir, 'text-files')
import_articles(text_dir)
我安装的应用程序如下所示:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'snippets.apps.SnippetsConfig',
]
当我尝试运行脚本时出现此错误:
ModuleNotFoundError: No module named 'snippets'
如何从 Django 项目正确加载 Snippet 模型以利用 Django 项目中使用的相同数据库?
我刚刚想通了,当然是在最后发布问题之后!我将 django 根目录设置为错误的目录。我需要将其设置为这个
current_dir = os.path.dirname(os.path.abspath(__file__))
parent_dir = os.path.dirname(current_dir)
root_dir = os.path.join(parent_dir, 'api')
sys.path.append(root_dir)
现在可以了!
造成错误的行是
from django.snippets.models import Snippet
。
应该如下所示。
from ..django.snippets.models import Snippet