Django:在基于类的视图中的get_context_data中放置更多上下文

时间:2018-12-23 22:53:14

标签: django

我确实知道要在Django的列表视图中放置更多上下文,我们可以像这样:

def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        b = 9
        context['num'] = b
        return context

,因此,我们可以在模板文件中使用num。

但是,假设我要将变量放置在上下文中,该怎么办?

b = 9
a = 10 
context['a', 'b'] = a, b

,然后在HTML模板中通过直接调用{{a}}或{{b}}来引用它,没有错误出现,但也没有任何错误。

我认为我对基本词典有一些误解,而django给它增加了困惑,因为似乎您不能在{{}}内使用()或[],有人可以回答为什么我们可以在{{}}内的html代码内使用()或[]吗?

1 个答案:

答案 0 :(得分:4)

context只是一本字典,所以您可以这样写:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    b = 9
    a = 10
    context['a'] = a
    context['b'] = b
    return context

或者您可以使用.update(..)调用,并在单个函数调用中添加元素:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    b = 9
    a = 10
    context.update(a=a, b=b)
    return context
  

为什么我们不能在()内的html代码中使用[]{{ }}

因为Django模板是有意限制的,以防止人们在模板中编写业务逻辑。 Jinja是允许执行函数调用和下标的模板处理器。但是通常,如果您需要在模板中使用它们,那么这表明设计可能有问题。