我使用django,nginx和gunicorn。Django FileField不能与德语“Umlaut”(ä,ö,ü)合作
在我的模型中,我有一个FileField与生产中的德语“Umlaute”不兼容。
当我尝试上传一个文件(选择文件,按下 “保存”)在/管理与 “变音符”:
UnicodeEncodeError: 'ascii' codec can't encode character '\xe4' in position 27: ordinal not in range(128)
models.py
class wiki(models.Model):
headline = models.CharField(max_length=255)
file = models.FileField(null=True, blank=True)
def __str__(self):
return self.headline
在开发网络服务器在本地机器上(./manage runserver)它工作正常,所以我认为它与gunicorn或nginx有关,并做了以下更改,但没有成功:
/etc/systemd/system/gunicorn.se起动转矩:
(加入--env LANG = de_DE.UTF-8)
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=django
Group=www-data
WorkingDirectory=/opt/django/project
ExecStart=/opt/django/bin/python3 /opt/django/bin/gunicorn --env LANG=de_DE.UTF-8 --workers 3 --bind unix:/opt/django/gunicorn.sock uhd.wsgi:application
[Install]
WantedBy=multi-user.target
的/ etc/nginx的/位点可用/域
server {
charset UTF-8;
}
这里有一些信息,我认为可能是有用的:
$区域
LANG=C.UTF-8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
cat/etc/* - release
PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
NAME="Debian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=debian
HOME_URL="http://www.debian.org/"
SUPPORT_URL="http://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
我很感激任何帮助。如果需要更多信息,请告诉我。
的Python 2.x的吧? 'def __str __(self):'应该是'def __unicode __(self):' – allcaps
实际上它是Python 3.5.3的开发版和Python 3.4.2的生产版。 –
我从不明白为什么开发人员想要为prd和dev使用两种不同的pythons。在你的情况下,它不可能与你的问题有关。但这是不好的做法。安装多个Pythons并不困难。因此,开发和生产**完全相同并不难。 – allcaps