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

Acy*_*Acy 1 django

我确实知道要在django的listview中放置更多上下文,我们可以这样:

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

这样,我们就可以在模板文件中使用num了。

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

b = 9
a = 10 
context['a', 'b'] = a, b
Run Code Online (Sandbox Code Playgroud)

然后在我的html模板中通过直接调用{{a}}或{{b}}来引用它,没有错误显示,但是也没有任何显示。

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

Wil*_*sem 5

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
Run Code Online (Sandbox Code Playgroud)

或者您可以使用一个.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
Run Code Online (Sandbox Code Playgroud)

为什么我们不能用()[]的HTML代码中的内部{{ }}

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