Py学习  »  Django

如何在 Django 项目中使用 pyecharts

编程派 • 6 年前 • 1352 次点击  

本指南是 pyecharts 库的开发者仿照 Django 官方教程撰写的,通过完成一个 Django 小项目来说明如何在 Django 中使用 pyecharts。


如果对 Django 还不太熟悉的开发者,可仔细阅读官方提供的最新文档。

作者:chenjiandongx 来源:https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/doc_django.md

Step 0: 使用新的 virtualenv 环境

建议开发者使用 1.11.4 版本的 Django

  1. $ virtualenv --no-site-packages pyecharts-env

  2. $ source pyecharts-env/bin/activate

  3. $ pip install django==1.11.4

  4. $ pip install pyecharts

Step 1: 新建一个 django 项目

  1. $ django-admin startproject myechartsite

创建一个应用程序

  1. $ python manage.py startapp myfirstvis

  2. $ ls

  3. db.sqlite3      manage.py       myechartsite    myfirstvis

在 myechartsite/settings.py 中注册应用程序

  1. # myechartsite/settings.py

  2. ...

  3. INSTALLED_APPS = [

  4.    'django.contrib.admin',

  5.    'django.contrib.auth',

  6.    'django.contrib.contenttypes',

  7.    'django.contrib.sessions',

  8.    'django.contrib.messages',

  9.    'django.contrib.staticfiles',

  10.    'myfirstvis'  #

  11. ]

  12. ...

我们先编辑 urls.py.这文件在 Django 里的功能是把前段的 HTTP 需求和后台服务函数挂钩。在 Step3,我们再引入后端服务函数

  1. # myfirstvis/urls.py

  2. from django.conf.urls import url

  3. from . import views

  4. urlpatterns = [

  5.    url(r'^$', views.index, name='index'),

  6. ]

在 myechartsite/urls.py 中新增 'myfirstvis.urls'

  1. myechartsite/urls.py

  2. from django.conf.urls import include, url

  3. from django.contrib import admin

  4. urlpatterns = [

  5.    url(r'^admin/', admin.site.urls),

  6.    url(r'myfirstvis/', include('myfirstvis.urls'))  #

  7. ]

Step 2: 处理视图功能部分

将下列代码保存到 myfirstvis/views.py 中。

  1. from __future__ import unicode_literals

  2. import math

  3. from django.http import HttpResponse

  4. from django.template import loader

  5. from pyecharts import Line3D

  6. from pyecharts.constants import DEFAULT_HOST

  7. def index(request):

  8.    template = loader.get_template('myfirstvis/pyecharts.html')

  9.    l3d = line3d()

  10.    context = dict(

  11.        myechart=l3d.render_embed(),

  12.        host=DEFAULT_HOST,

  13.        script_list=l3d.get_js_dependencies()

  14.    )

  15.    return HttpResponse(template.render(context, request))

  16. def line3d():

  17.    _data = []

  18.    for t in range(0, 25000):

  19.        _t = t / 1000

  20.        x = (1 + 0.25 * math. cos(75 * _t)) * math.cos(_t)

  21.        y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)

  22.        z = _t + 2.0 * math.sin(75 * _t)

  23.        _data.append([x, y, z])

  24.    range_color = [

  25.        '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',

  26.        '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']

  27.    line3d = Line3D("3D line plot demo", width=1200, height=600)

  28.    line3d.add("", _data, is_visualmap=True,

  29.               visual_range_color=range_color, visual_range=[0, 30],

  30.               is_grid3D_rotate=True, grid3D_rotate_speed=180)

  31.    return line3d

script_list 是 Page() 类渲染网页所需要依赖的 echarts js 库,依赖的库的数量取决于所要渲染的图形种类。

host 是 echarts js 库的地址,默认的地址为 http://chfw.github.io/jupyter-echarts/echarts 当然,如果你愿意你也可以改变这个地址,先克隆 https://github.com/chfw/jupyter-echarts 然后将 echarts 文件夹挂载在你自己的服务器上即可。

Step 3: 为项目提供自己的模板

前面的步骤是按照 tutorial part 1,接下来我们跳到 tutorial part 3

Linux/macos 系统

  1. $ mkdir templates/ myfirstvis -p

Windows 系统 
在 myfirstvis 目录下,新建 templates/myfirstvis 子目录

myfirstvis 目录

  1. myfirstvis

  2.    ├── admin.py

  3.    ├── apps.py

  4.    ├── __init__.py

  5.    ├── migrations

  6.       ├── __init__.py

  7.    ├── models.py

  8.    ├── templates

  9.       └── myfirstvis

  10.           └── pyecharts.html

  11.    ├── tests.py

  12.    ├── urls.py

  13.    └── views.py

将下面 html 模板代码保存为 pyecharts.html,请确保 pyecharts.html 文件的绝对路径为  root>/myfirstvis/templates/myfirstvis

  1.     charset="utf-8">

  2.    </span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">Proudly presented by PycCharts</span><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"/></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">    {% for jsfile_name in script_list %}</span></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">    </span><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"><script><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="atn" style="box-sizing: border-box;color: rgb(222, 147, 95);">src</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">=</span><span class="atv" style="box-sizing: border-box;color: rgb(138, 190, 183);">"{{host}}/{{jsfile_name}}.js"</span><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);">></script></span></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">    {% endfor %}</span></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"/></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"/></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"/></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">  {{myechart|safe}}</span></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"/></code></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"/></p></li><li><p><code class="html language-html" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="tag" style="box-sizing: border-box;color: rgb(204, 102, 102);"/></code></p></li></ol></pre><h2 style="box-sizing: border-box;margin-top: 2rem;margin-bottom: 1rem;color: rgb(21, 153, 87);white-space: normal;">Step 4: 运行项目</h2><pre class="prettyprint linenums prettyprinted" style="box-sizing: border-box;overflow: auto;font-family: Consolas, Menlo, Courier, monospace;font-size: 10px;background-color: rgb(29, 31, 33);border-width: 1px;border-style: solid;border-color: rgb(136, 136, 136);padding: 2px;color: rgb(80, 97, 109);line-height: 12px;"><ol class="linenums list-paddingleft-2" style=""><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;" <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-1837452791782084" data-ad-slot="7041996284"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">$ cd myechartsite</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">$ python manage</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">.</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">py runserver</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"/></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">You</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> have </span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">13</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> unapplied migration</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">(</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">s</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">).</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">Your</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> project may </span><span class="kwd" style="box-sizing: border-box;color: rgb(178, 148, 187);">not</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> work properly </span><span class="kwd" style="box-sizing: border-box;color: rgb(178, 148, 187);">until</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> you apply the migrations </span><span class="kwd" style="box-sizing: border-box;color: rgb(178, 148, 187);">for</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> app</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">(</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">s</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">):</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> admin</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">,</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> auth</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">,</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> contenttypes</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">,</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> sessions</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">.</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">Run</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="str" style="box-sizing: border-box;color: rgb(181, 189, 104);">'python manage.py migrate'</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> to apply them</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">.</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"/></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">August</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">08</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">,</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">2017</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">-</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">05</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">:</span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">48</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">:</span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">38</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">Django</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> version </span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">1.11</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">.</span><span class="lit" style="box-sizing: border-box;color: rgb(222, 147, 95);">4</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">,</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> </span><span class="kwd" style="box-sizing: border-box;color: rgb(178, 148, 187);">using</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> settings </span><span class="str" style="box-sizing: border-box;color: rgb(181, 189, 104);">'myechartsite.settings'</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">Starting</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> development server at http</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">:</span><span class="com" style="box-sizing: border-box;">//127.0.0.1:8000/</span></code></p></li><li><p><code class="shell language-shell" style="box-sizing: border-box;font-family: monospace, monospace;display: inline;max-width: initial;overflow: initial;line-height: 12px;word-wrap: normal;background-color: transparent;border-width: 0px;border-style: initial;border-color: initial;"><span class="typ" style="box-sizing: border-box;color: rgb(129, 162, 190);">Quit</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> the server </span><span class="kwd" style="box-sizing: border-box;color: rgb(178, 148, 187);">with</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);"> CONTROL</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">-</span><span class="pln" style="box-sizing: border-box;color: rgb(197, 200, 198);">C</span><span class="pun" style="box-sizing: border-box;color: rgb(197, 200, 198);">.</span></code></p></li></ol></pre><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;">访问 http://localhost:8000/myfirstvis/,你就可以看到酷炫的 3D 图了</p><p><img data-type="gif" data-copyright="0" style="max-width: 600px" class="" data-ratio="0.6666666666666666" data-w="360" src="http://img2.100weidu.com/get?src=http://mmbiz.qpic.cn/mmbiz_gif/HZW0wwFxbQC3FMpgmFlg2drdfhrwPqtDt80f2X0US8vc2jIfuwD15GmXY0tGVRlcPzNXdV7Vh6GzxZ3ooicdBow/0?wx_fmt=gif"/></p><h2 style="box-sizing: border-box;margin-top: 2rem;margin-bottom: 1rem;color: rgb(21, 153, 87);white-space: normal;">小结</h2><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;">看到了吧,只需要简单的几步就可以使用 pyecharts 创建可视化的图表。Django 官方教程需要七步的这里我们三步就搞定了。</p><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;">具体文档可以参考 pyecharts/document 文件夹。</p <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-1837452791782084" data-ad-slot="7041996284"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <hr style="box-sizing: content-box;height: 2px;margin-top: 1rem;margin-bottom: 1rem;background-color: rgb(239, 240, 241);border-width: 0px;border-style: initial;border-color: initial;color: rgb(80, 97, 109);font-size: 15px;white-space: normal;"/><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;">题图:pexels,CC0 授权。</p><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;"><img style="box-sizing: border-box; border-width: 0px; border-style: initial; border-color: initial; max-width: 600px" class="" data-ratio="0.4703328509406657" data-w="691" data-type="jpeg" src="http://img2.100weidu.com/get?src=http://mmbiz.qpic.cn/mmbiz_jpg/HZW0wwFxbQC3FMpgmFlg2drdfhrwPqtDTO7v7Sib7WuNzspiaZfqKL67PicicgHWFVjVqIIXf6TpkvAa5Aysia6FmhQ/0?wx_fmt=jpeg"/></p><p style="box-sizing: border-box;font-size: 14px;color: rgb(62, 62, 62);margin-bottom: 15px;margin-top: 15px;line-height: 2em;white-space: normal;">点击<strong style="box-sizing: border-box;">阅读原文</strong>,查看更多 Python 教程和资源。</p> </div> <br/> <div>今天看啥 - 高品质阅读平台 <br/>本文地址:<a href="http://www.jintiankansha.me/t/IbZPBQqG7R">http://www.jintiankansha.me/t/IbZPBQqG7R</a> </div> <img alt="" width="1px" height="1px" class="" style="width:1px;height:1px;display:none" src="/rss_static/IbZPBQqG7R"/> </div> <div class="sep10"></div> </div> <div class="inner fade" style="font-size:11px;"> <div>Python社区是高质量的Python/Django开发社区 <br/>本文地址:<a href="http://www.python88.com/topic/4267">http://www.python88.com/topic/4267</a> </div> </div> <div id="topic-post-footer" class="inner"> <div class="fr"> <span> <a data-id="编程派" class="reply_one" href="#;"> <img border="0" align="absmiddle" alt="Reply" src="/static/image/site/reply.png?v=fd2df694c762184c58a3170353a02a32"> </a> </span> </div>   </div> <div class="topic_buttons"> <div style="line-height: 12px; padding-top: 3px; text-shadow: 0px 1px 0px #fff;" class="fr gray f11">1352 次点击   </div> </div> </div> <div class="box"> <div class="inner"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 普通广告(正在使用) --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1837452791782084" data-ad-slot="6787195013" data-ad-format="auto"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="sep20" style="background-color: #e2e2e2;"></div> <div class="sep20" style="background-color: #e2e2e2;"></div> <div align="center" style="background-color: #e2e2e2;"> <div style="text-align: center" class="inner"> <span style=""> <a style="width: 100px;color: #fff;height: 30px;font-size: 14px;line-height: 30px" class="green-btn" href="/account/signin?next=http://www.python88.com/topic/4267"> 登录后回复 </a> </span> </div> </div> <div class="box"> <div class="inner"> <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- 普通广告(正在使用) --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-1837452791782084" data-ad-slot="6787195013" data-ad-format="auto"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> </div> </div> <div class="c"></div> <div class="sep20"></div> </div> <div id="Bottom"> <div class="content footer"> <div class="inner"> <div class="sep10"></div> <div class="fr"> </div> <strong> <a href="/about" class="dark" target="_self">关于</a>   <a class="go-mobile" href="javascript:;">移动版</a>   <span class="snow">·</span>   <a href="http://ask.codingpro.cn" target="_blank" class="dark">三行代码</a>   <span class="snow">·</span>   <a href="http://www.jintiankansha.me" class="dark" target="_blank">今天看啥</a>   <span class="snow">·</span>   <a href="http://code.python88.com/" class="dark" target="_blank">Code</a>   <span class="snow">·</span>   <a href="http://www.linkmax.top" class="dark" target="_blank">link之家</a>   <span class="snow">·</span>   <a href="http://www.wolongai.cn" class="dark" target="_blank">卧龙搜索</a>   <span class="snow">·</span>   <a href="http://t.linkmax.top" class="dark" target="_blank">藏经阁</a>   <span class="snow">·</span>   <a href="http://baike.linkmax.top" class="dark" target="_blank">小百科</a> </strong> <div class="sep20"></div> Py学习 - 专注于Python技术发展的社区(原Django社区) <div class="sep20"></div> <span class="f12 gray"> <a href="http://beian.miit.gov.cn/" target="_blank" rel="nofollow">沪ICP备11025650号</a></span> <div class="sep10"></div> </div> </div> </div> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> <script type="text/javascript" src="/static/js/vendors/jquery/jquery.autosize.js?v=ac4d62e3842f55aa2b78d2c2ef1af833"></script> <script type="text/javascript" src="/static/js/vendors/lscache/lscache.min.js?v=bf403ab76d287d394375662defac76c3"></script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/select2/3.0.0/select2.min.js"></script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/jquery.selectboxit/3.8.0/jquery.selectBoxIt.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/jquery.textcomplete/0.3.3/jquery.textcomplete.min.js" type="text/javascript"></script> <script type="text/javascript" src="/static/js/site/base/common.js?v=97646d06e4a04b2bf43b7b467cfd321e"></script> <script type="text/javascript" src="/static/js/site/base/v2ex.js?v=d41d8cd98f00b204e9800998ecf8427e"></script> <script type="text/javascript" src="/static/js/site/base/base.js?v=4734e41dc8139093c113d6a48489a0f4"></script> <script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?ab7c822fcd4037bf0757e1fef7f75736"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> <script type="text/javascript" src="https://cdn.bootcdn.net/ajax/libs/highlight.js/9.2.0/highlight.min.js"></script> <script src="/static/js/site/topics/topic.js?v=29ad56b293145926c753c4fd31cea767"></script> </body> </html>