Django:在视图中访问时,settings.py 中的重音字符被破坏

2024-06-28

我在 settings.py 中有重音字符,我使用 getattr(settings, 'MY_CONSTANT_NAME', []) 在视图中访问这些字符,但 getattr() 调用返回损坏的字符(例如,“ô”变为:“\xc3\xb4 ”)。

这是 view.py 中的代码:

    from django.conf import settings

    def getValueFromSetting(request):
        mimetype = 'application/json' 
        charset=utf-8' datasources = getattr(settings, 'MY_CONSTANT_NAME', []) 
        config= '{' 
        config+= '"datasources": ' + str(datasources).replace("'", '"') 
        config+= '}'

        return HttpResponse(config,mimetype)                      

到目前为止我已经做了什么来尝试解决这个问题:

  • 我放 # -- 编码:utf-8 -- 作为我的settings.py和我的views.py的第一行
  • 我将 u'ô' 或 unicode('ô') 放在 settings.py 中的特殊字符前面
  • 我把 DEFAULT_CHARSET = 'utf-8' 放在 settings.py 中
  • 我尝试了 .decode('utf-8')、.encode('utf-8')、.decode('iso-8859-1')、.encode('iso-8859-1') 的所有可能组合settings.py 或views.py 中的特殊字符...

什么都不能解决问题。

有什么建议可以解决这个问题吗?

谢谢

Etienne


我假设你正在看到这些\xc3\xb4浏览器中的字符串.. 您是否尝试过编辑模板文件以在 HTML 标头中定义正确的字符集?

<head>
  <meta name="description" content="example" />
  <meta name="keywords" content="something" />
  <meta name="author" content="Etienne" />
  <meta charset="UTF-8" />      <!--  <---- This line -->
</head>

在此答案中发表第一条评论后进行编辑:

我猜测getattr不能与其他人一起使用ascii编码。您认为以下内容不会达到您想要的效果吗?

from django.conf import settings

def getValueFromSetting(request):
    myConstantValue = settings.MY_CONSTANT_NAME
    # check myConstantValue here

最后评论后编辑:

我想现在我明白你的问题了。您不喜欢视图返回的 JSON 仅为 ASCII。我推荐你使用dumps提供的功能json与 Python 捆绑在一起的模块。这是一个例子:

# -*- coding: utf-8 -*-
# other required imports here
import json

def dumpjson(request):
   response = HttpResponse(json.dumps(settings.CONSTANT_TUPLE, encoding='utf-8', ensure_ascii=False), content_type='application/json')

   return response

The CONSTANT_TUPLE在这个例子中只是一个副本DATABASES in my settings.py.

这里重要的一点是ensure_ascii=False。你能尝试一下吗?那是你要的吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django:在视图中访问时,settings.py 中的重音字符被破坏 的相关文章

随机推荐