使用Django開發網頁時,會把使用的app與一些設定寫在setting.py這個設定檔內,程式執行的時候,會import設定檔內的東西。但如果寫了一隻不在Django專案裡的python script,卻想要呼叫Django裡面的module時,就要自己做import的動作拉!

比如說我的Django目錄長這樣

  Django_project/
  |
  |─ virtualenv/
  |─ project/
  |─ python_script.py

那麼外部的程式python_script.py就需要做以下的import

sys.path.append(os.path.join(os.path.dirname(__file__), ‘project’))
os.environ.setdefault(“DJANGO_SETTINGS_MODULE”, “project.settings”)
from django.conf import settings

再舉個例子,筆者使用Django Mail Queue這個套件來寄信,信件的產生由一隻外部的程式在背景執行,因此除了要引入django setting外,還要將相關的model引入。

import sys, os
sys.path.append(os.path.join(os.path.dirname(__file__), 'project'))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings")
from django.conf import settings
from mailqueue.models import MailerMessage

new_message = MailerMessage()
new_message.subject = "My Subject"
new_message.to_address = "example@gmail.com"
new_message.from_address = "example@gmail.com"
new_message.content = "Mail content"
new_message.html_content = "<h1>Mail Content</h1>"
new_message.app = "Name of your App that is sending the email."
new_message.save()

參考資料
Using Django models in external Python scripts