环境:

    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这个环境变量。