/en/ 类型“__proxy__”对象的类型错误不可 JSON 序列化

2024-02-02

我正在尝试在我的 django 项目中实现面包屑。为了实现这一点,我创建了一个 mixin,我拥有的每个视图都会继承它。这是代码:

class BreadcrumbMixin(object):
    index = False
    url_name = None
    verbose_name = None

    def breadcrumbUpdate(self, breadcrumb, new_value):
        for i in range(len(breadcrumb)):
            if breadcrumb[i]['url_name'] == new_value['url_name']:
                breadcrumb = breadcrumb[:i + 1]
        breadcrumb.append(new_value)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        new_value = {
            'url_name' : self.url_name,
            'verbose_name' : self.verbose_name,
            'url' : reverse_lazy(self.url_name, **kwargs)
        }

        if self.index:
            self.request.session['breadcrumb'] = [new_value,]
        else:
            self.breadcrumbUpdate(self.request.session['breadcrumb'], new_value)
        return context

属性index, url_name and verbose_name在继承它的每个视图中设置。例如:

class Index(BreadcrumbMixin, TemplateView):
    template_name = 'crud/index.html'
    index = True
    url_name = 'index' # Name argument used in urls.py
    verbose_name = _('Index')

它基本上使用这些信息来制作字典列表,然后使用以下命令将其传递给模板session字典。在模板中,它是这样调用的:

<div style="margin-left: 10px;">
    {% for element in request.session.breadcrumb %}
        <a href="{{ element.url }}" class="breadcrumb"> {{ element.verbose_name }} </a>
    {% endfor %}
</div>

问题是,它给了我标题中提到的错误。这是回溯:

Environment:


Request Method: GET
Request URL: http://localhost:8000/en/

Django Version: 2.0
Python Version: 3.6.3
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'crud']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/core/handlers/exception.py" in inner
  35.             response = get_response(request)

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/utils/deprecation.py" in __call__
  97.             response = self.process_response(request, response)

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/contrib/sessions/middleware.py" in process_response
  58.                             request.session.save()

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/contrib/sessions/backends/signed_cookies.py" in save
  41.         self._session_key = self._get_session_key()

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/contrib/sessions/backends/signed_cookies.py" in _get_session_key
  77.             serializer=self.serializer,

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/core/signing.py" in dumps
  109.     data = serializer().dumps(obj)

File "/home/jcarvalho/.envs/webdesk/lib/python3.6/site-packages/django/core/signing.py" in dumps
  87.         return json.dumps(obj, separators=(',', ':')).encode('latin-1')

File "/usr/lib64/python3.6/json/__init__.py" in dumps
  238.         **kw).encode(obj)

File "/usr/lib64/python3.6/json/encoder.py" in encode
  199.         chunks = self.iterencode(o, _one_shot=True)

File "/usr/lib64/python3.6/json/encoder.py" in iterencode
  257.         return _iterencode(o, 0)

File "/usr/lib64/python3.6/json/encoder.py" in default
  180.                         o.__class__.__name__)

Exception Type: TypeError at /en/
Exception Value: Object of type '__proxy__' is not JSON serializable

据我了解,它无法序列化要在模板中使用的面包屑,但为什么呢?

PS:我从来没有直接使用过JSON,所以我不知道如何处理它。


当使用 JSONSerializer 在会话对象中存储数据时,该数据必须仅包含可以转换为 json 的值。

在您的代码中,您正在使用一些惰性对象,这就是您得到的地方__proxy__。在序列化之前必须将它们转换为字符串。

new_value = {
        'url_name' : self.url_name,
        'verbose_name' : str(self.verbose_name),
        'url' : str(reverse_lazy(self.url_name, **kwargs))  # or just reverse()
    }

你也可以编写自己的序列化器 https://docs.djangoproject.com/en/4.1/topics/http/sessions/#write-your-own-serializer or use DjangoJSON编码器 https://docs.djangoproject.com/en/4.1/topics/serialization/#djangojsonencoder(我自己没有尝试过,但是阅读文档,似乎序列化器可以处理惰性对象。)

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

/en/ 类型“__proxy__”对象的类型错误不可 JSON 序列化 的相关文章

  • 是否可以根据节点大小更改字体大小?

    根据NetworkX https networkx github io documentation networkx 1 10 reference generated networkx drawing nx pylab draw netwo
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • django 模板 - 如何动态访问变量?

    假设我有一个具有以下上下文的 django 模板 data1 this is data1 data2 this is data2 data name data2 现在我知道了data name 假设它是 data2 是否可以用它来访问变量d
  • 发送 POST 请求时 JSON 原语无效

    我有以下 ajax 请求 其中我尝试将 JSON 对象发送到服务器 function sendData subscriptionJson ajax type POST url Url Action SubscribeSecurities S
  • 使用 Python 绘制 USGS 水文数据甘特图?

    我编译了一个数据帧 其中包含几个不同流计的 USGS 流数据 现在我想创建一个类似的甘特图this https stackoverflow com questions 31820578 how to plot stacked event d
  • 导入 pandas 显示 ImportError: 无法导入名称哈希表

    我已经在 python 3 3 上安装了 pandas 代码如下 import csv import pandas from pandas import DataFrame csvdata pandas read csv datafile
  • 无法让gunicorn使用Python 3

    我有 Ubuntu NGINX Gunicorn 以及可与 Python 3 设置配合使用的虚拟环境 但我的 Flask 应用程序仍然以 2 7 6 运行 我已系统地按照说明进行操作 但找不到解决方案 Gunicorn 配置文件 progr
  • SQL查询json字典数据

    我的表中的 CLOB 字段包含 JSON 如下所示 a value1 b value2 c value3 我正在尝试编写一个 SQL 查询来返回一个包含键和值字段的表 如下所示 key value a value1 b value2 c v
  • Django 站点框架初始设置

    我对相当一维的 Django 实现很满意 但现在尝试了解具有共享内容的多站点过程 我已经阅读了 Django 站点框架和有关该主题的许多帖子 但我没有了解如何启动使用相同数据库但以单独域名呈现的第二个站点的基础知识 我有一个非常愉快且按规矩
  • 从 JSON 响应中删除元素

    我有一个 JSON 字符串 我希望能够从中删除一些数据 以下是 JSON 响应 ResponseType VirtualBill Response BillHeader BillId 7134 DocumentId MN003 052206
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 键绑定 - 鼠标中键与 Sublime Text 2

    有谁知道是否可以将鼠标中键绑定到 Sublime Text 2 中的操作 我知道可以进行一些鼠标交互 因为您可以使用后退和前进按钮 基本上 我将使用此按钮通过 sFTP 插件上传文件 这样我需要按下的按钮数量就会从 3 个减少到 1 个 目
  • 无法将数据加载到 mvc 4 中的 jTable 中

    好的 我第一次尝试 jTable 我可以加载表 但这对我没有什么好处 因为它不会加载我的任何数据 当我调试程序时 我想要的表中的所有行都存储在我的列表中 因此我很困惑为什么当我运行应用程序时会弹出一个对话框 显示 与服务器通信时发生错误 H
  • 条件触发器的Django迁移sql

    我想创建一个触发器 仅在满足条件时插入表 我尝试过使用 IF BEGIN END 和 WHERE 的各种组合 但 Django 每次都会返回 SQL 语法错误 这里 type user id指的是触发该事件的人 user id指的是接收到通
  • 如何在 Ubuntu 16.04 上的 Python 3 / Matplotlib 2 中安装底图?

    I tried pip3 install basemap but Basemap https sourceforge net projects matplotlib files matplotlib toolkits 好像不在 PyPI 上
  • djangorest框架更改主键以使用唯一字段

    我有一个模型叫做GameProfile 这是一对一的关系User模型 我用了HyperlinkedModelSerializer贯穿我所有的设计 For the GameProfile 用户字段应该是查询的主键 它是唯一的但我没有将其设置为
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • 如何链接 Django 的“in”和“iexact”查询集字段查找?

    我有一个名字列表 例如 name list Alpha bEtA omegA 目前我有以下查询集 MyModel objects filter name in name list 我希望能够以不区分大小写的方式过滤名称 我的第一个想法是使用

随机推荐