我正在开发一个django应用程序。在开发服务器上,一切正常。 在生产服务器上(使用apache),没有任何工作。
1 /我在/ 处有 TemplateDoesNotExist错误。
在我的settings.py文件中:
SITE_ROOT = os.path.abspath(os.path.dirname(__name__))
。这是项目的根路径。
templateDir = os.path.join(SITE_ROOT, 'templates/')
TEMPLATE_DIRS = (
templateDir
)
这是模板路径。
2 /如果我用项目的绝对路径改变SITE_ROOT:
SITE_ROOT="/var/www/europolix"
模板似乎被识别,但我还有另一个错误: 没有名为getEurlexIdsFunctions 的模块 这是代码:
import sys
sys.path.append('import')
import getEurlexIdsFunctions as eurlexIds
我认为问题再一次来自相对路径。 Apache似乎在“var / www /”中搜索“import”而不是在“var / www / europolix /”中搜索。我是对的吗?
这是我的apache配置:
WSGIScriptAlias /europolix /var/www/europolix/europolix/wsgi.py
WSGIPythonPath /var/www/europolix/
<Directory /var/www/europolix/>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
是否存在无法识别根路径的问题,还是存在其他问题?
非常感谢。
答案 0 :(得分:1)
嗯,有几件事。使用settings.py
时最好将所有路径声明为绝对路径。我在你的代码中看到你有这一行
SITE_ROOT = os.path.abspath(os.path.dirname(__name__))
对于网站的根,但我认为如果您使用__file__
全局变量而不是__name__
会更好。像这样:
SITE_ROOT = os.path.abspath(os.path.dirname(__file__))
我在生产服务器上有一个django应用程序,我必须添加到我的httpd.conf
关于wsgi
的{{1}}指令和虚拟主机内的这一行
load_module
将WSGIScriptAlias / C:/Users/ike/Documents/Work/Sincronoz/code/apache/django.wsgi
脚本的别名指定为根目录。
然后在django.wsgi
脚本中我有这段代码:
django.wsgi
我认为你最好不要使用绝对路径,当你完成所有工作时,如果你需要,可以尝试根据自己的需要调整它,可能需要相对路径。
希望它有所帮助。
答案 1 :(得分:0)
在文件wsgi.py中的django项目中我添加了这3行
import sys
DJANGO_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)),'..')
sys.path.append(DJANGO_PATH)