Django:处理非ASCII名称的静态文件问题
我把我的Django应用程序从一台服务器迁移到了另一台服务器,结果发现媒体文件出现了奇怪的bug:
Traceback (most recent call last):
File "/usr/lib/python2.5/site-
packages/Django-1.1.1-py2.5.egg/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python2.5/site-packages/Django-1.1.1-py2.5.egg/django/views/static.py", line 51, in serve
if os.path.isdir(fullpath):
File "/usr/lib/python2.5/posixpath.py", line 195, in isdir
st = os.stat(path)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 44-46: ordinal not in range(128)
我尝试访问的图片名字里有西里尔字母,但在之前的环境中并没有出现这个问题。
谢谢,
Oleg
2 个回答
0
在Django的文档中提到,这可能和Apache的设置有关(可以通过这里找到更多信息)。
https://docs.djangoproject.com/en/1.4/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror
“确保启动Apache时使用的环境配置能够接受非ASCII的文件名。如果你的环境配置不正确,当你在包含非ASCII字符的文件名上调用像os.path()这样的函数时,就会出现UnicodeEncodeError错误。
为了避免这些问题,启动Apache时的环境应该包含类似以下的设置:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
请查阅你的操作系统文档,以获取适当的语法和放置这些配置项的位置;在Unix平台上,/etc/apache2/envvars是一个常见的位置。一旦你将这些设置添加到环境中,记得重启Apache。”
附言:我现在的主机技术支持非常慢,而且我也无法访问Apache的设置。所以目前我只能使用Django的静态文件服务。我的网站访问量不大,别无选择,尽管我知道这样做不是最优的。
0
首先,不要让Django来处理你的静态文件。想了解更多可以看看这个链接:http://docs.djangoproject.com/en/dev/howto/static-files/