每次我通过SSH登录服务器时,都需要输入以下内容:
export DJANGO_SETTINGS_MODULE=settings
如果我没有使用manage.py模块失败
我的manage.py有以下添加的代码:
if "notification" in settings.INSTALLED_APPS:
from notification import models as notification
def create_notice_types(app, created_models, verbosity, **kwargs):
notification.create_notice_type("friends_invite", _("Invitation Received"), _("you have received an invitation"))
notification.create_notice_type("friends_accept", _("Acceptance Received"), _("an invitation you sent has been accepted"))
signals.post_syncdb.connect(create_notice_types, sender=notification)
else:
print "Skipping creation of NoticeTypes as notification app not found"
有什么想法吗?
答案 0 :(得分:11)
您的manage.py
正在引用应用程序(notifications
)。这迫使Django抱怨设置了DJANGO_SETTINGS_MODULE,因为还没有设置Django环境。
顺便提一下,您可以手动强制进行环境设置,但老实说,我不会在manage.py中执行此操作。在我看来,这不是一个好的做法。
以下是如何从任何应用程序(或程序)中手动设置Django环境:
# set up the environment using the settings module
from django.core.management import setup_environ
from myapp import settings
setup_environ(settings)
答案 1 :(得分:6)
您需要设置DJANGO_SETTINGS_MODULE环境变量,因为Django知道您的设置模块的调用方式(因此您可以在每个项目中使用不同的模块或进行测试和开发。)您可以在脚本本身之前设置它你导入django(直接或间接),但是当你运行Django提供的脚本时,这不会有太大作用。
最简单的解决方案可能只是在shell的启动脚本中设置DJANGO_SETTINGS_MODULE,因此您不必再手动设置它。添加它的常用文件是.bash_profile和.bashrc(如果确实使用了bash。)
答案 2 :(得分:0)
默认情况下,manage.py在与自身相同的目录中查找设置模块。如果找不到,则会发出一条消息,使用django-admin.py代替。它实际上并没有设置environemnt,直到它运行execute_manager
。如果您在调用管理功能之前需要运行挂钩,我看到的建议是将它们放在相关应用程序的models.py
中。