如何在没有相对项目路径的子目录中使用Django设置运行脚本

我想执行位于restaurants_project/scripts/seeds.py脚本。这个种子文件将通过使用我的Django模型Restaurant,根据同一文件夹中的CSV数据填充我的数据库。我发现将项目设置(即restaurant_project.settings)和我的必要模型一起包含在种子文件中的唯一方法是sys.path.append('MY_PROJECTS_RELATIVE_PATH')。我显然不希望这样做在生产(或我?)有啥包括没有得到这些设置的最佳方法如下ImportError:如何在没有相对项目路径的子目录中使用Django设置运行脚本

ImportError: Could not import settings 'restaurants_project.settings' (Is it on sys.path? Is there an import error in the settings file?): No module named 'restaurants_project' 

Directory Tree:

|___restaurants_project 

| |______init__.py

| |______pycache__

| | |______init__.cpython-34.pyc

| | |____settings.cpython-34.pyc

| |____settings.py

| |____urls.py

| |____wsgi.py

|____restaurants

| |______init__.py

| |______pycache__

| | |______init__.cpython-34.pyc

| | |____admin.cpython-34.pyc

| | |____models.cpython-34.pyc

| |____admin.py

| |____migrations

| | |______init__.py

| |____models.py

| |____tests.py

| |____views.py

|____scripts

| |______init__.py

| |______pycache__

| | |______init__.cpython-34.pyc

| |____restaurant_inspections_2014.csv

| |____seeds.py

| |____unique_restaurant_ids.txt

seeds.py:

import os, sys 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'restaurants_project.settings')

import django

django.setup()

import csv

csvfile = open('restaurant_inspections_2014.csv')

reader = csv.reader(csvfile)

headers = next(reader, None)

for row in reader:

print(row)

import pdb; pdb.set_trace()

回答:

编写使用项目设置的脚本的最佳方式是编写自定义管理命令:

https://docs.djangoproject.com/en/1.8/howto/custom-management-commands/

基本上你应该换你的脚本扩展BaseCommand一个类内部,并把它的management/commands目录中的应用程序内。

以上是 如何在没有相对项目路径的子目录中使用Django设置运行脚本 的全部内容, 来源链接: utcz.com/qa/265705.html

回到顶部