类型为'的/en/对象处的类型错误__代理';JSON不可序列化
我正试图在django项目中实现面包屑。为了证明这一点,我创建了一个mixin,它由我拥有的每个视图继承。代码如下:类型为'的/en/对象处的类型错误__代理';JSON不可序列化,json,django,python-3.x,Json,Django,Python 3.x,我正试图在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)):
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
属性索引
、url\u名称
和详细名称
在继承它的每个视图中设置。例如:
class Index(BreadcrumbMixin, TemplateView):
template_name = 'crud/index.html'
index = True
url_name = 'index' # Name argument used in urls.py
verbose_name = _('Index')
它基本上使用这些信息来创建dict列表,并使用会话
字典将其传递给模板。在模板中,它的调用方式如下:
<div style="margin-left: 10px;">
{% for element in request.session.breadcrumb %}
<a href="{{ element.url }}" class="breadcrumb"> {{ element.verbose_name }} </a>
{% endfor %}
</div>
据我所知,它无法序列化要在模板中使用的面包屑,但为什么
PS:我从未直接使用过JSON,所以我不知道如何处理它。当使用JSONSerializer在会话对象中存储数据时,该数据必须只包含可以转换为JSON的值 在您的代码中,您使用了一些惰性对象,这就是您获得
\uuuuu代理\uuuu
的原因。在序列化之前,必须将它们转换为字符串
new_value = {
'url_name' : self.url_name,
'verbose_name' : str(self.verbose_name),
'url' : str(reverse_lazy(self.url_name, **kwargs)) # or just reverse()
}
您也可以使用或(我自己还没有尝试过,但在阅读文档时,似乎序列化程序可以处理惰性对象。)
new_value = {
'url_name' : self.url_name,
'verbose_name' : str(self.verbose_name),
'url' : str(reverse_lazy(self.url_name, **kwargs)) # or just reverse()
}