Django:处理非ASCII名称的静态文件问题

3 投票
2 回答
879 浏览
提问于 2025-04-15 17:04

我把我的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/

撰写回答