python交互式环境,django模板报错:django.core.exceptions.ImproperlyConfigured

本文介绍了解决Django项目中因缺少环境配置而导致的模板调试问题。提供了三种解决方法:通过调用settings.configure(),使用manage.py shell命令,或在.bash_profile中设置DJANGO_SETTINGS_MODULE环境变量。

转载:http://medone.blog.51cto.com/9469723/1576601

环境:
ubuntu
django 1.5
virtualenv环境中

(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/milo/.virtualenvs/web01/local/lib/python2.7/site-packages/django/template/base.py", line 123, in __init__
    if settings.TEMPLATE_DEBUG and origin is None:
  File "/home/milo/.virtualenvs/web01/local/lib/python2.7/site-packages/django/conf/__init__.py", line 52, in __getattr__
    self._setup(name)
  File "/home/milo/.virtualenvs/web01/local/lib/python2.7/site-packages/django/conf/__init__.py", line 45, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting TEMPLATE_DEBUG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

原因是缺少环境变量,我们导入环境变量即可。解决方法如下。
方法1:

(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from django.conf import settings
>>> settings.configure()
>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> 
可以正常使用,无报错信息。

方法2:

(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ python manage.py shell # 以此方式进入交互式环境
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>> 
可以正常使用,无报错信息。平时测试django的交互式环境建议以此方式进入交互模式,以免不必要的麻烦。

方法3:

(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ vim ~/.bashrc 

增加如下内容:
export DJANGO_SETTINGS_MODULE=pro01.settings
# 其中pro01是django的项目名称
# 实际就是调用的项目的配置文件settings.py
然后执行:
(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ source ~/.bashrc 

milo@nf:~/.virtualenvs/web01/dj_01/pro01$ workon web01
(web01)milo@nf:~/.virtualenvs/web01/dj_01/pro01$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from django import template
>>> t = template.Template('My name is {{ name }}.')
>>>

摘自 The Django Book 2.0
我们先来看一下为什么不引入setting会报错。
启动python有两种方式:python manage.py shell和python。

这两个命令 都会启动交互解释器,但是manage.py shell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用 哪个设置文件。 Django框架的大部分子系统,包括模板系统,都依赖于配置文件;如果Django不知道使用哪 个配置文件,这些系统将不能工作。

如果你想知道,这里将向你解释它背后是如何工作的。 Django搜索DJANGO_SETTINGS_MODULE环境变 量,它被设置在settings.py中。例如,假设mysite在你的Python搜索路径中,那么 DJANGO_SETTINGS_MODULE应该被设置为:’mysite.settings’。
当你运行命令:python manage.py shell,它将自动帮你处理DJANGO_SETTINGS_MODULE。 在当前的这 些示例中,我们鼓励你使用python manage.py shell这个方法,这样可以免去你大费周章地去配置那些你 不熟悉的环境变量。
随着你越来越熟悉Django,你可能会偏向于废弃使用manage.py shell ,而是在你的配置文 件.bash_profile中手动添加 DJANGO_SETTINGS_MODULE这个环境变量。

所以,另两种解决方案就是:

1.使用 python manage.py shell启动Python

2.在你的配置文 件.bash_profile中手动添加 DJANGO_SETTINGS_MODULE这个环境变量。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值