为什么需要设置DJANGO_SETTINGS_MODULE?
每次我通过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"
有什么建议吗?
3 个回答
0
默认情况下,manage.py 会在它自己所在的文件夹里寻找一个设置模块。如果找不到,就会报错,提示你使用 django-admin.py 来代替。实际上,它在运行 execute_manager
之前并不会设置环境。如果你需要在调用管理功能之前运行一些钩子(也就是一些特定的代码),我看到的建议是把这些钩子放在相关应用的 models.py
文件里。
6
你需要设置一个叫做 DJANGO_SETTINGS_MODULE 的环境变量,因为这是 Django 知道你的设置模块名称的方式(这样你可以为不同的项目或测试和开发设置不同的配置)。你可以在脚本中 在 导入 Django 之前设置这个变量(无论是直接还是间接),但当你运行 Django 提供的脚本时,这样做效果不大。
最简单的解决办法可能就是在你的命令行启动脚本中设置 DJANGO_SETTINGS_MODULE,这样你就不需要每次手动设置了。通常可以把它添加到 .bash_profile 和 .bashrc 文件中(如果你确实在使用 bash 的话)。
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)