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

Posted

技术标签:

【中文标题】从 django 中的单个视图呈现多个模板【英文标题】:render multiple template from a single view in django 【发布时间】:2018-09-29 12:08:31 【问题描述】:

我想将上下文数据发送到一个 html 并希望呈现不同的 html。 登录后用户被重定向到此仪表板视图。这里我想渲染两个 html 文件,上下文值将被发送到一个 html 比如说 temp1.html 文件,但用户可以看到 temp2.​​html 文件。在 temp2.​​html 和其他 html 文件中,我将包含 temp1.html 文件。有什么办法吗? 视图.py

def dashboard(request):
    print('in dashboard view')
    object = UserSelection.objects.get(user=request.user)

    if object.user_type == 'candidate':
        val_cand = CandidateDetail.objects.filter(candidate_username=request.user)
        if val_cand:
            print('Candidate filled data') #Already filled data
            data = CandidateDetail.objects.get(candidate_username=request.user)
            return render(request, 'dashboard.html','obj':object.user_type, 'data':data)
        else:
            print('new user') #Registered but not filled data
            return render(request, 'dashboard.html', 'obj':object.user_type)

    else:
        val_emp = EmployerDetail.objects.filter(name=request.user)
        if val_emp:
            print('Employer filled data') #Already filled data
            data = EmployerDetail.objects.get(name=request.user)
            return render(request, 'dashboard.html','obj':object.user_type, 'data':data)
        else:
            print('new user') #Registered but not filled data
            return render(request, 'dashboard.html', 'obj':object.user_type)

【问题讨论】:

你能解释一下如何在一个 html 中显示两个 html 文件吗? 我将上下文数据发送到 temp1.html 文件,根据某些条件会有一些价值。我的项目中有很多 html 文件,我将使用 % include 'file_name' % 标签包含 temp1.html 文件。 @Raja Simon 如果parent html 文件可以访问variable 通过视图发送功能,那么child html 文件也可以访问它。那是你要的吗。?或者您想将其他变量传递给子 html 吗? 是的,但在同一个视图中,我希望用户被重定向到 temp2.​​html 文件,并且只有数据将被发送到 temp1.html 文件。 def dash(request): val_cand = CandidateDetail.objects.get(candidate_username=request.user) return render(request, 'temp2.​​html') return render(request, 'temp1.html', 'value':val_cand)我想要这样的东西@Raja Simon 重定向是什么意思?这太令人困惑了,这个问题可能因为Unclear what you are asking 而很接近请用更多信息编辑您的问题... 【参考方案1】:

您不能在单个视图中呈现两个 html 文件。请为所需的行为使用 Django 模板语言。

即)如果您将obj 传递给dashboard.html 并且内部的html文件也可以访问obj。

dashboard.html

 obj 

% include 'test1.html' %
% include 'test2.html' %

您可以使用关键字参数向模板传递额外的上下文:

% include 'test1.html' with obj=obj additional_context='blah' %

test1.html

 obj  

【讨论】:

以上是关于从 django 中的单个视图呈现多个模板的主要内容,如果未能解决你的问题,请参考以下文章

从 django 中的视图更新模板标签的值

Django:如何从模板中识别调用视图?

Django 模板标签 - 返回多个值或对象

使用 ajax 时,Django 视图不呈现模板

有没有办法可以在Django中的同一个模板中渲染多个视图?如果有最佳实践可以做到这一点?提前致谢

我可以在 django 中的单个表单中使用多个表单集,如果可以的话如何?