Django 使用“super”在基本模板中导入随机列表时出现问题。我的 work-around 的替代方案是什么?
Trouble with Django importing random list in base template using ´super´. What is the alternative to my work-around?
更新:由于回复,包括了一个小的调整,见下文。
我正在尝试在我的网页(基本模板)的标题中加载一个随机列表。我能够使用 Super 获得此 运行。但是,此时已为每个视图完成此操作。
这似乎不合逻辑。作为一个业余爱好者,我很难确定这是不是真的 and/or 如果我是对的(我在解释技术描述时遇到了一些麻烦......)。
有人能把我推向正确的方向吗?
列表生成:
def generatetraits():
traits = ["trait1", "trait2", "trait3", "trait4", "trait5", "trait6",
"trait7", "trait8", "trait9", "trait10", "trait11"]
random.shuffle(traits)
traitlist = ""
for i in range(0, 3):
if (i == 0) or (i == 1):
traitlist = traitlist + (traits[i] + " | ")
else:
traitlist = traitlist + (traits[i] + " ")
return traitlist
SomeView 示例:
class SomeView(TemplateView):
template_name = 'about.html'
traitlist = generatetraits()
def get_context_data(self, **kwargs):
context = super(SomeView, self).get_context_data(**kwargs)
context.update({'traits': self.traitlist})
return context
基本模板实现:
<div class="title">
<h1>Name</h1>
<p> {{traits}} </p>
</div>
所有pages/views都是从base扩展出来的。这让我(作为业余爱好者;))对每个视图都这样做是错误的。
更新:
上下文调用已缩短为:
def get_context_data(self, **kwargs):
return {'traits': generatetraits()}
正如@solarissmoke 所指出的那样,解决方案是设置一个上下文处理器。
此处理器最终为:
def headertaggen(request):
traits = ["trait1", "trait2", "trait3", "trait4", "trait5", "trait6"]
random.shuffle(traits)
return {'traits': ' | '.join(traits[:3:])}
然后在由所有其他模板填充的基本模板中调用密钥 'traits'。
感谢大家的帮助!
更新:由于回复,包括了一个小的调整,见下文。
我正在尝试在我的网页(基本模板)的标题中加载一个随机列表。我能够使用 Super 获得此 运行。但是,此时已为每个视图完成此操作。
这似乎不合逻辑。作为一个业余爱好者,我很难确定这是不是真的 and/or 如果我是对的(我在解释技术描述时遇到了一些麻烦......)。
有人能把我推向正确的方向吗?
列表生成:
def generatetraits():
traits = ["trait1", "trait2", "trait3", "trait4", "trait5", "trait6",
"trait7", "trait8", "trait9", "trait10", "trait11"]
random.shuffle(traits)
traitlist = ""
for i in range(0, 3):
if (i == 0) or (i == 1):
traitlist = traitlist + (traits[i] + " | ")
else:
traitlist = traitlist + (traits[i] + " ")
return traitlist
SomeView 示例:
class SomeView(TemplateView):
template_name = 'about.html'
traitlist = generatetraits()
def get_context_data(self, **kwargs):
context = super(SomeView, self).get_context_data(**kwargs)
context.update({'traits': self.traitlist})
return context
基本模板实现:
<div class="title">
<h1>Name</h1>
<p> {{traits}} </p>
</div>
所有pages/views都是从base扩展出来的。这让我(作为业余爱好者;))对每个视图都这样做是错误的。
更新:
上下文调用已缩短为:
def get_context_data(self, **kwargs):
return {'traits': generatetraits()}
正如@solarissmoke 所指出的那样,解决方案是设置一个上下文处理器。
此处理器最终为:
def headertaggen(request):
traits = ["trait1", "trait2", "trait3", "trait4", "trait5", "trait6"]
random.shuffle(traits)
return {'traits': ' | '.join(traits[:3:])}
然后在由所有其他模板填充的基本模板中调用密钥 'traits'。
感谢大家的帮助!