首页 > 解决方案 > 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()}

标签: djangosuper

解决方案


正如@solarissmoke 所指出的,解决方案是设置上下文处理器。

该处理器最终成为:

def headertaggen(request):
    traits = ["trait1", "trait2", "trait3", "trait4", "trait5", "trait6"]
    random.shuffle(traits)

    return {'traits': ' | '.join(traits[:3:])}

然后在由所有其他模板填充的基本模板中调用关键“特征”。

感谢大家的帮助!


推荐阅读