如何在 Django 中将多个上下文呈现为相同的 HTML

Posted

技术标签:

【中文标题】如何在 Django 中将多个上下文呈现为相同的 HTML【英文标题】:How do I render multiple contexts to the same HTML in Django 【发布时间】:2020-10-15 14:44:51 【问题描述】:

这只是一个关于 Django 的问题。我有两个视图,我将两个上下文渲染到两个视图。如何将两个上下文渲染到同一个 html 模板?

【问题讨论】:

【参考方案1】:

如果我正确理解您的问题,您可以在渲染时在两个视图函数中调用相同的模板文件:

def your_view_1(request):
    context_1: dict = 'key': 'a_string_depending_on_request_or_view'
    return render(request, 'common_template.html', context_1)

def your_view_2(request):
    context_2: dict = 'key': 'another_string'
    return render(request, 'common_template.html', context_2)

【讨论】:

以及如何将它们添加到 urls.py 中? 以及如何将它们添加到 urls.py 中?实际上我遇到了一个问题,即我只能访问 jinja 模板中的一个变量。其中一个没有显示任何值 @bolino 只需在你的 urls.py 中放两个“path”或“re_path”,调用你的每一个视图。关于模板,它不需要使用上下文中的所有变量,所以如果你愿意,你可以只使用其中的一部分。 你能指定一个上述评论的例子吗? @bolino 例如urlpatterns = [path('path-1/', views.your_view_1, name='view-name-1'), path('path-2/', views.your_view_2, name='view-name-2'),]【参考方案2】:
def view_1(request):
    context_1: dict = 
     //Your key/value pairs
     check = False
    
    return render(request, 'common_template.html', context_1)

def view_2(request):
    context_2: dict = 
    //Your other key value pairs
    check = True
    
    return render(request, 'common_template.html', context_2)

然后在你的模板中,你可以做一个 if-else

% if check %
//do stuff related to view2
% else %
//do stuff related to view1 %
%endif%

【讨论】:

但是我已经有一本来自另一个类的字典,它没有像 check 这样的任何标志 但是我已经有一本来自另一个类的字典,它没有像 check 这样的任何标志 在这种情况下,如果键相同且值不同,则可以使用 bolino 的答案。但是,如果键也不同,请检查它们是否为空,如果不是,则执行操作。 不,我的键不一样。为什么我必须使用条件。我不能直接引用 HTML 文件中的变量吗? @Abhishek @Sri Test 是的,您可以直接引用它们,但对于阅读模板中代码的其他人来说,什么东西来自哪个视图并没有多大意义。虽然我不明白你到底想在这里问什么?

以上是关于如何在 Django 中将多个上下文呈现为相同的 HTML的主要内容,如果未能解决你的问题,请参考以下文章

如何将 django 模板变量呈现为 html?

Django 模板 - 更改“包含”模板的上下文

从 django 中的单个视图呈现多个模板

在 Google App Engine 中将 docx 文件呈现为 django 模板

Django 基础知识:如何使用基于类的视图呈现上下文

如何在 django 中将一个表单字段拆分为模型的多个字段?