我的django站点使用一个带有左、中、右块的基本模板。中间块和右侧块由详图样板扩展,详图样板获取由多个视图在上下文中传递的数据。
型号.py
class Participant(models.Model):
name = models.CharField(max_length=64)
...
class Code(models.Model):
name = models.CharField(max_length=64)
source = models.TextField()
author = models.ForeignKey(Participant, on_delete=models.CASCADE)
一旦参与者已知,左侧块应始终以代码名称列表的形式显示participant.code_set的结果。
我之前通过在会话中添加pickle参与者实例来做到这一点,只要知道它,然后在基本模板中的session.participant.code_set上循环。
有没有其他方法可以在不使用PickleSerializer进行会话的情况下实现同样的效果?
感谢
好的,我找到了解决方案:上下文处理器
context_processor.py
def inject_codes(request):
try:
codes = Code.objects.filter(author=request.session['participant']['pk'])
return {'codes': codes}
except KeyError:
return {}
设置.py
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...,
'draw.context_processor.inject_codes',
],
},
},
]