django - 如何将项目附加到 ListView 中的上下文数据?
问题描述
我在 a 中使用自定义 mixinListView
并希望将values
特定key
(list
?)添加到context
变量中:
class MyMixin:
mylist = ['itemA']
class MyList(MyMixin, ListView):
mylist = ['item1','item2']
def get_context_date(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
context['mylist'].append(self.mylist)
return context
期望的结果是mylist = ['itemA', 'item1', 'item2']
但是,这会导致key_error
. 将键值附加到的正确方法是context
什么?
解决方案
ListView
是返回作为方法结果检索的模型实例(或其他对象)的列表get_queryset()
。这通常是QuerySet
检索一些模型对象但可以是任何可迭代的。
在您的示例中,没有关于mylist
属性最初应如何出现在视图上下文中的代码。
首先,您需要定义get_queryset方法以返回所需对象的可迭代。
或者,您可以在类级别属性中设置它queryset
,但它可能不是很动态。
接下来,您可以使用get_context_object_name方法定义将用于包含此视图正在操作的数据列表的上下文变量名称 - 使用context_object_name
类属性或在每个请求都需要动态名称的情况下。
此外,类级mylist
属性在类实例上不可用 __ (作为__init MyList.mylist 访问或简单地在方法级别上定义为局部变量。self) until set in
method. You can access it as a class attribute
class MyList(MyMixin, ListView):
context_object_name "mylist"
def get_queryset(self):
# some logic to return required data of this view
# or simply
# return ['itemA']
return SomeModel.objects.all().values_list('name', flat=True)
def get_context_data(self, **kwargs):
context = super(ListView, self).get_context_data(**kwargs)
mylist = ['item1','item2']
context['mylist'].append(mylist)
return context
推荐阅读
- php - 使用 php 读取 PDF 文件时处理数据
- python - ValueError: list.remove(x): x not in list error with xml file reading
- c# - 为什么 GetQueryNameValuePairs 会删除方括号?
- python - 如何使用 Python 在 gurobi 中计算 2 范数约束?
- php - Laravel:尝试在 null 上分配属性“键”
- javascript - 尝试丢弃时 onHit 永远不会触发(react-drag-drop-container)
- java - 为正常任务和计划任务使用单独的线程池
- c# - 改变目录的条件
- graph - 从存储员工详细信息(即年龄、家乡和薪水)的用户中获取以下形式的字典作为输入
- javascript - 异步查询选择器访问