Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django admin中保存对象时出现unicode错误_Python_Django_Unicode_Django Admin - Fatal编程技术网

Python 在django admin中保存对象时出现unicode错误

Python 在django admin中保存对象时出现unicode错误,python,django,unicode,django-admin,Python,Django,Unicode,Django Admin,在我的django应用程序中,我有一些对象导致django管理员中的相应URL为非ascii。(例如:http://mysite/admin/myapp/myclass/Pr语句/) 我可以毫无问题地编辑对象,但在保存对象时出现以下错误: UnicodeEncodeError:“ascii”编解码器无法对位置24处的字符u'\xe9'进行编码:序号不在范围(128)内,HTTP响应头必须为US-ascii格式 奇怪的是,对象被正确地保存到数据库中 有人知道Django管理员是如何管理unicod

在我的django应用程序中,我有一些对象导致django管理员中的相应URL为非ascii。(例如:
http://mysite/admin/myapp/myclass/Pr语句/

我可以毫无问题地编辑对象,但在保存对象时出现以下错误:

UnicodeEncodeError:“ascii”编解码器无法对位置24处的字符u'\xe9'进行编码:序号不在范围(128)内,HTTP响应头必须为US-ascii格式

奇怪的是,对象被正确地保存到数据库中

有人知道Django管理员是如何管理unicode的吗?任何有助于解决此问题的信息、指针或想法都将不胜感激

提前谢谢

更新:这是模型的代码

class Plugin(models.Model):
    """Some subcontent that can be added to a given page"""
    class Meta:
        ordering = ['ordering']

    name = models.CharField(max_length=32, primary_key=True)
    div_id = models.CharField(default='rightcol', max_length=32)
    published = models.BooleanField(default=True,
        help_text=_("If this is not checked, it is not displayed on the page."))
    ordering = models.IntegerField(default=1,
        help_text=_("plugins are sorted with this number in ascending order"))
    content = models.TextField(blank=True)
    registration_required = models.BooleanField(_('registration required'),
        help_text=_("If this is checked, only logged-in users will be able to view the page."))

    def __unicode__(self):
        return u"%s -- %s" % (self.name, self.div_id)
更新: 很明显,不建议在URL中使用非ascii字符。这就是我问题的原因,我已经改变了这一点


有人知道Django管理员使用什么来构建对象的URL吗。我想这是主键。是这样吗?有没有办法强迫Django使用其他东西并安全地检索对象?

我很确定您的数据库可能使用了拉丁1编码。Django假设您将所有内容都设置为unicode(utf8)

要检查这一点,请进入MySQL Shell并键入:

mysql> show variables like 'char%';
如果您看到一堆拉丁文1(或任何其他非utf8编码,二进制除外),则必须执行以下操作: 打开my.cnf并查找
[mysqld]
部分。 确保在
tmpdir=/tmp
之后有以下行:

default-character-set=utf8
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-external-locking
skip-character-set-client-handshake
重新启动服务器

您必须重新创建或手动编辑所有数据库和表的编码,更改my.cnf只会影响将要创建的数据库

希望我能帮上忙


编辑:顺便问一下,您使用的是哪个Django版本?似乎这是一个在1.1上修复的错误:

在您的模型中,您是否尝试过将

class Model(models.Model):
   def __unicode__(self):
       return self.name ## having a model object named "name"

不确定这是否是您想要的答案,但您试过了吗?

我现在使用默认id作为模型中每个类的主键。因此,当从管理站点访问对象时,url中没有禁止的字符

我建议在大多数情况下保留默认id作为主键

保存我的一天
您必须在型号中为管理员添加unicode支持。py

class MyModel (models.Model):
    some_field = models.CharField(max_length=1000)
    def __unicode__(self):
        return u'%s'%(self.some_field)

可能还有其他问题,例如:您的系统编码不是utf8您的数据库编码不是utf8,以及。。。这是在提供的链接中提到的

你能发布你的发布模型吗?我会和我的主机提供商核实一下。我有|字符集|客户端|拉丁1 |字符集|连接|拉丁1 |字符集|数据库| utf8 |字符集|文件系统|二进制|字符集|结果|拉丁1 |字符集|服务器|拉丁1|如果他们不更改,您可以重新创建数据库,将所有内容设置为UTF8。根据我的主机提供程序,此pb与db编码无关。我认为他是对的,因为这个pb是零星的。谢谢你的帮助,我认为这与数据库无关。数据保存正确。这个问题来自URL中的法语字母。django代码的某些部分似乎接受它,而有些部分则不接受。您是否检查了此链接?Django 1.1上似乎有一个bug被修复了,你在哪个版本?我的模型有一个unicode。Django不使用unicode来构建url。我认为它将无法安全地检索该对象。我猜它使用主键。谢谢你的帮助