如何将pyecharts生成的html嵌入Django框架的div中

项目场景:

项目场景:在使用Django框架的时候遇到需要将pyecharts动态生成的html网页嵌入到对应页面的div标签中。


解决方案:

我们可以使用<iframe>标签解决这个问题

1.网页生成

首先我们使用pyecharts生成一个图标的网页,代码如下:

def show_year(number=15):
    from pyecharts.charts import Bar
    from pyecharts import options as opts
    """
    获取年代展示功能实现
    """
    read_movies = pd.read_csv('../data/movies.csv', encoding='utf-8')
    movie_years = read_movies['RELEASE_DATE'].to_list()
    year_list = []
    # 处理日期格式
    for i in range(len(movie_years)):
        year_list.append(str(movie_years[i]).split('-')[0])
    data_year = Counter(year_list)
    # 排序
    data_year = sorted(data_year.items(), key=lambda x: x[1], reverse=True)
    x_years = []
    y_years = []
    for k, v in data_year:
        x_years.append(k)
        y_years.append(v)
    # 生成网页
    bar = Bar(init_opts=opts.InitOpts(width="800px", height="400px", page_title="img_view",
                                      ))
    # 展示年份最多的,前15个年份
    bar.add_xaxis(x_years[:number + 1])
    bar.add_yaxis("电影年代", y_years[:number + 1])

    bar.set_global_opts(title_opts=opts.TitleOpts(title="电影年代-电影数量", subtitle="统计"))
    # render 会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件
    # 也可以传入路径参数,如 bar.render("mycharts.html")
    bar.render("../templates/fc_show.html")

这里使用pyecharts生成了一个网页fc_show.html,因为使用的Django我们需要为这个网页配置viewsurl

2.网页链接配置

views.py中我们设置一个跳转到这个界面的视图。

def jump_years(request):
    """
    跳转可视化电影年代
    """
    return render(request, 'fc_show.html', {})

url.py中我们设置一个跳转链接

    # 电影年份
    path('bi_data/show_years/', views.jump_years, name="show_years"),

注意:此处本网页的链接名称为“show_years”,其中“bi_data”为想要嵌入的网页,这个地方需要将链接的上级目录配置为想要嵌入的网页的url

  • 配置好后可以单独访问此网页代表网页生成成功,如下:

独立网页

3.将独立的html嵌入div中

我们想将生成的html嵌入到对应的div中,如下:
想将生成的html嵌入到对应的div中

  • html界面如下:
    网页界面
    我们想在红框标注的位置嵌入pyecharts生成的网页。
  • 只需要加入一个<iframe frameborder=0 src="show_years" width="100%" height="450"></iframe>
  • 其中src为我们前面配置的show_years的url地址。
  • width="100%" height="450":代表嵌入的网页框的大小。
  • frameborder=0 :为去除iframe的外边框,让嵌入页面更自然。

最后嵌入效果如下:
嵌入效果

  • 同理如果多图的话我们依然可以在同一个网页加上其他iframe的元素来实现动态生成图标。

4.嵌入页完整代码:

base_uer.html

<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css"
          integrity="sha384-B0vP5xmATw1+K9KRQjQERJvTumQW0nPEzvF6L/Z6nronJ3oUOFUFpCjEUQouq2+l" crossorigin="anonymous">
    {% load static %}
    <link rel="stylesheet" href="{% static 'css/mycss.css' %}" type="text/css">
    <title>E-learning</title>
</head>
<body>
<!--导航栏-->
<div class="container">
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
                aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarSupportedContent">
            <ul class="navbar-nav mr-auto">
                <!-- 返回主页 -->
                <li class="nav-item">
                    <a class="nav-link active" href="{% url 'start' %}">Home <span
                            class="sr-only">(current)</span></a>
                </li>
                &nbsp;&nbsp;
                <!-- 课程资料 -->
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="materials" role="button"
                       data-toggle="dropdown" aria-expanded="false">Materials
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                        <a class="dropdown-item" href="{% url 'cet4' %}" >CET4</a>
                        <a class="dropdown-item" href="{% url 'cet6' %}" >CET6</a>
                    </div>
                </li>
                &nbsp;&nbsp;
                <!-- 商业智能 -->
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="BI" role="button"
                       data-toggle="dropdown" aria-expanded="false">BI
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                        <a class="dropdown-item" href="{% url 'bi_data' %}" >Data Analysis</a>
                        <a class="dropdown-item" href="{% url 'bi_personalization' %}" >Personalization</a>
                    </div>
                </li>
                &nbsp;&nbsp;
                <!-- 用户功能 -->
                <!---->
                <li class="nav-item dropdown">
                    <a class="nav-link dropdown-toggle" href="#" id="user" role="button"
                       data-toggle="dropdown" aria-expanded="false">User
                    </a>
                    <div class="dropdown-menu" aria-labelledby="navbarDropdown">
                        <a class="dropdown-item" href="{% url 'signup' %}">Signup</a>
                        <a class="dropdown-item" href="{% url 'user_login' %}">Login</a>
                    </div>
                </li>
            </ul>

            <div class="text-center">
                <span class="navbar-brand mb-0 h1">E-learning</span>
            </div>
        </div>
    </nav>
</div>
<br>
{% block content %}
{% endblock %}
<br>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js"
        integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj"
        crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns"
        crossorigin="anonymous"></script>
</body>
</html>

bi_data.html

{% extends 'base_user.html' %}
{% block content %}
<div class="container">
    <div class="jumbotron">
        <div class="row">
            <div class="col-md-12">
                <div class="card text-left">
                    <h6 class="card-header">Length analysis</h6>
                    <div class="card-body">
                        <div class="tab-content">
                            <p class="card-title">Length analysis of reading comprehension articles over the years</p>
                            <hr class="my-4">
                            <div id="data_img_1">
                                <iframe frameborder=0 src="show_years" width="100%" height="450"></iframe>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</div>
{% endblock %}
  • 26
    点赞
  • 101
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论
很抱歉,作为AI语言模型,我无法在这里生成一个完整的Django框架代码。但是,我可以为您介绍一下如何创建一个Django项目,并且提供一些常见的Django代码示例。 1. 安装Django 首先,您需要在本地计算机上安装Django。您可以使用以下命令在终端/命令提示符安装: ``` pip install django ``` 2. 创建Django项目 在安装完Django后,您可以使用以下命令创建一个新的Django项目: ``` django-admin startproject myproject ``` 这将在当前目录创建一个名为“myproject”的新Django项目。项目目录结构如下: ``` myproject/ manage.py myproject/ __init__.py settings.py urls.py asgi.py wsgi.py ``` 其: - `manage.py`:该文件是Django命令行工具的入口点,用于管理Django项目。 - `myproject/`:该文件夹是Django项目的主要目录,包含了项目的配置和应用程序。 - `myproject/__init__.py`:该文件用于标识myproject目录是一个Python包。 - `myproject/settings.py`:该文件包含Django项目的设置和配置,例如数据库连接、静态文件路径等。 - `myproject/urls.py`:该文件包含Django项目的URL路由配置。 - `myproject/asgi.py`:该文件是ASGI(异步服务器网关接口)应用程序的入口点。 - `myproject/wsgi.py`:该文件是WSGI(Web服务器网关接口)应用程序的入口点。 3. 创建Django应用程序 在Django项目,应用程序是指一个功能独立的模块。您可以使用以下命令在项目创建一个新的Django应用程序: ``` python manage.py startapp myapp ``` 这将在项目目录创建一个名为“myapp”的新Django应用程序。应用程序目录结构如下: ``` myapp/ __init__.py admin.py apps.py models.py tests.py views.py ``` 其: - `__init__.py`:该文件用于标识myapp目录是一个Python包。 - `admin.py`:该文件包含Django应用程序的管理界面设置。 - `apps.py`:该文件包含Django应用程序的配置信息。 - `models.py`:该文件包含Django应用程序的模型定义。 - `tests.py`:该文件包含Django应用程序的测试代码。 - `views.py`:该文件包含Django应用程序的视图函数。 4. 编写Django代码示例 以下是一些常见的Django代码示例: - 在`myapp/models.py`定义一个模型类: ```python from django.db import models class Person(models.Model): name = models.CharField(max_length=100) age = models.IntegerField() def __str__(self): return self.name ``` - 在`myapp/views.py`定义一个视图函数: ```python from django.shortcuts import render from .models import Person def person_list(request): persons = Person.objects.all() return render(request, 'person_list.html', {'persons': persons}) ``` - 在`myproject/urls.py`配置URL路由: ```python from django.urls import path from myapp.views import person_list urlpatterns = [ path('persons/', person_list, name='person_list'), ] ``` - 在`myapp/admin.py`配置管理界面: ```python from django.contrib import admin from .models import Person admin.site.register(Person) ``` - 在`myproject/settings.py`配置静态文件路径: ```python STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] ``` - 在`myproject/settings.py`配置数据库连接: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': 'localhost', 'PORT': '3306', } } ``` 这只是Django的一些常见代码示例,您可以根据自己的需求编写更多代码。希望这能帮助您开始编写Django代码!
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雾的小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值