django - 在单个页面中显示多个视图
问题描述
我有一个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 %}
解决方案
我不确定我是否正确理解了您的问题,但如果它不在连接到仪表板端点的视图中,仅包含 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()
函数的只是供模板使用的上下文数据字典,只要该字典中有正确的数据,并且字典中的正确变量名用于正在呈现的模板或任何包含在其中的模板,它应该被显示。
希望这有助于回答您的问题!
推荐阅读
- kivy - kivy 中的目录进入主目录,而不是 mac 中 main.py 的目录,但 Windows 中没有
- css - 如何使用 flex 使 div 随内容扩展?
- c - 来自 Nim 编译器的 C 字符串文字
- jestjs - vue/test-utils:将 localVue 和 stubs.transition 添加到 mount() 但会抛出错误,例如“无法读取未定义的属性 '_transitionClasses'”
- javascript - 使用 webpacker 从 Rails 控制器渲染 js
- php - 以不同名称存储的会话文件
- anaconda - Anaconda:ModuleNotFoundError:没有名为“conda”的模块
- javascript - springMvc 后端数据变化时如何让后端数据自动返回前端?
- carousel - 带有 nativescript-vue 的轮播
- java - 部署到 TomEE Plus 的 WAR 文件未发送电子邮件:加载程序约束违规错误