django - Django 使用“super”在基本模板中导入随机列表时出现问题。我的解决方法是什么?
问题描述
更新:由于回复,包括一个小的调整,见下文。
我正在尝试在我的网页标题(基本模板)中加载一个随机列表。我能够使用 Super 来运行它。但是,此时对每个视图都执行此操作。
这似乎不合逻辑。作为一个业余爱好者,我很难确定这是否属实和/或我是否正确(我在解释技术描述时遇到了一些麻烦……)。
有人能把我推向正确的方向吗?
列表生成:
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>
所有页面/视图都从基础扩展。这使我(作为业余爱好者;))对每个视图都这样做是错误的。
更新:
上下文调用已缩短为:
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:])}
然后在由所有其他模板填充的基本模板中调用关键“特征”。
感谢大家的帮助!
推荐阅读
- ios - UIButton TitleLabel - 当 titleLabel 为 nil 时如何设置 UIButton 的字体?
- arrays - 在 SnapLogic 中将数组转换为字符串
- python - 访问 tf.keras.callbacks.Callback 中已弃用的属性“validation_data”
- android - 我们可以更改用 putextra 的值写入并在 textview 的下一个活动中分配的文本的大小吗?
- ios - Swift Realm - 如何计算单列中的所有数据?
- vue.js - 在 Vuex 中,如何在应用程序首先加载/渲染时加载状态并使用状态中的数据?,我使用 nuxt、Vue 和 Vuex 作为存储
- c# - 如何在字典中查找内部哈希集并在 C# 中返回键值?
- java - 在 init() 中使用 JavaFX Alert 时出现 IllegalStateException,因为不在 FX 应用程序线程上
- powershell - 通过powershell“压缩存档”的压缩文件中缺少属性“A”
- python - 在另一个线程中保存大图像