首页 > 解决方案 > 在单个页面中显示多个视图

问题描述

我有一个Django Webapp用于向数据库添加数据的几种形式。添加此数据后,我想将其显示在仪表板上。因此,我编写的视图添加了要呈现的数据的逻辑,但据我所知,您只能将 1 个视图映射到模板,否则数据将不会显示在模板上。

我认为有一种方法可以将数据作为上下文传递,但我无法理解如何为我的观点编写这个。

一个非常简单的视图,我必须显示事件

def all_events(request):
        event_list = Event.objects.all()
        return render(request, 'pages/event_list.html',{'event_list': event_list})

我把这个传给event_list它工作正常。但是,如果我 % include %在仪表板上,我会得到HTML但不是数据,我现在明白这是正确的。

但是作为一个绝对更大的 Django,我真的可以用上面的一个例子来做,然后我可以将它应用到我所有的其他视图中。

谢谢

HTML 模板

{% extends 'partials/base.html' %}
{% load static %}
{% block head_title%}
        <title> Dashboard </title>
{% endblock %}
{% block extra_css %}
        <link rel="stylesheet" type="text/css" href="{% static 'libs/toastr/build/toastr.min.css' %}">
        <!-- plugin css -->
        <link href="{% static 'libs/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css' %}" rel="stylesheet" type="text/css" />      
        
{% endblock %}
{% block content %}
<div class="main-content">
        <div class="page-content">
            <div class="container-fluid">
                <!-- start page title -->
                <div class="row">
                    <div class="col-12">
                        <div class="page-title-box d-sm-flex align-items-center justify-content-between">
                            <h1 class="display-4 mb-0">Dashboard</h1>
                            <div class="page-title-right">
                                <ol class="breadcrumb m-0">
                                    <li class="breadcrumb-item"><a href="javascript: void(0);">Dashboard</a></li>
                                    <li class="breadcrumb-item active">Dashboard</li>
                                </ol>
                            </div>

                        </div>
                    </div>
                </div>
         </div>
         {% include 'pages/event_list.html' %} 
    </div>
{% endblock %}

{% block extra_js %}
    <script src="{% static 'libs/@ckeditor/ckeditor5-build-classic/build/ckeditor.js' %}"></script>
    <!-- init js -->
    <script src="{% static 'js/pages/form-editor.init.js' %}"></script>
    <!-- pristine js -->
    <script src="{% static 'libs/pristinejs/dist/pristine.min.js' %}"></script>  
{% endblock %}

标签: django

解决方案


我不确定我是否正确理解了您的问题,但如果它不在连接到仪表板端点的视图中,仅包含 pages.html 文件不会将正确的上下文数据传递到仪表板。Django 将端点指向视图,视图从模型中获取或创建上下文数据,并返回带有数据的模板。

您的仪表板 url 模式可能看起来像这样

urlpatterns = [
    path('dashboard/', dashboard_view, name="dashboard"),
]

然后你的视图可能看起来像这样

def dashboard_view(request):
        event_list = Event.objects.all()
        return render(request, 'path/to/dashboard.html',{'event_list': event_list})

假设 event_list.html 文件正确使用了上下文数据变量,如下所示,它也将显示在仪表板上。

{{ for event in event_list }}
    {{ event.attribute }}
{{ endfor }}

您传递给render()函数的只是供模板使用的上下文数据字典,只要该字典中有正确的数据,并且字典中的正确变量名用于正在呈现的模板或任何包含在其中的模板,它应该被显示。

希望这有助于回答您的问题!


推荐阅读