社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

如何在 Django 项目中使用 pyecharts

编程派 • 7 年前 • 1632 次点击  

本指南是 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">1632 次点击   </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 class="sep10"></div> <!-- cpu feeds block --> <div class="cpu-feeds-block" data-site-id="275549911" data-block-id="96829"></div> <script> (function(){var url="//cpu.baidu.com";var getEntry=function(){var script=document.createElement("script");script.id="cpu-block-entry";script.src=url+"/js/cb.js";var scriptTag=document.getElementsByTagName("script")[0];scriptTag.parentNode.insertBefore(script,scriptTag)};var sentMsg=function(e){var msg={msg:e.toString()||"no err msg",line:e.lineno||-1};var img=document.createElement("img");img.src=url+"/msg?m=block&e="+encodeURIComponent(JSON.stringify(msg))};try{window.feedsbycpu=window.feedsbycpu||[];window.feedsbycpu.push({siteId:"275549911",blockId:"96829",display:"auto"});document.getElementById("cpu-block-entry")||getEntry()}catch(e){sentMsg(e)}})(); </script> <!-- cpu feeds block end--> </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> </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://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/highlight.js/9.2.0/highlight.min.js"></script> <script type="text/javascript" src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript" src="https://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/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://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/select2/3.0.0/select2.min.js"></script> <script type="text/javascript" src="https://lf6-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery.selectboxit/3.8.0/jquery.selectBoxIt.min.js"></script> <script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/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://lf9-cdn-tos.bytecdntp.com/cdn/expire-1-M/highlight.js/9.2.0/highlight.min.js"></script> <script src="/static/js/site/topics/topic.js?v=29ad56b293145926c753c4fd31cea767"></script> </body> </html>