尝试在 Django 上传按钮旁边嵌入散景图时出现 ImportError
ImportError when trying to embed a Bokeh plot alongside a Django upload button
我正在尝试将散景图嵌入到具有上传按钮的 Django 站点中。我正在使用 here as a starting point and then adding on the instructions on embedding from 给出的示例。我使用 need-a-minimal-django-file-upload-example/for_django_1.8
并且它按预期工作。然后我修改了以下文件,但出现以下错误:
ImportError: No module named 'myapp'
你可以在这里看到我的目录结构和三个文件modified/added:
如果无法加载图片,请点击此处:
.
└── myproject
├── db.sqlite3
├── manage.py
├── media
│ └── documents
│ └── 2016
│ └── 01
│ ├── 12
│ │ └── silico_0_truth_filtered_ptps.csv
│ └── 15
│ └── silico_0_truth_filtered_ptps.csv
└── myproject
├── __init__.py
├── myapp
│ ├── admin.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── admin.cpython-35.pyc
│ │ ├── forms.cpython-35.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── __init__.cpython-35.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── models.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ └── views.cpython-35.pyc
│ ├── templates
│ │ ├── list.html
│ │ └── simple_chart.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── __pycache__
│ ├── __init__.cpython-34.pyc
│ ├── __init__.cpython-35.pyc
│ ├── settings.cpython-34.pyc
│ ├── settings.cpython-35.pyc
│ ├── urls.cpython-35.pyc
│ └── wsgi.cpython-35.pyc
├── settings.py
├── urls.py
└── wsgi.py
这里是templates/simple_chart.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Experiment with Bokeh</title>
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-0.8.1.min.js"></script>
<link rel="stylesheet" href="http://cdn.bokeh.org/bokeh/release/bokeh-0.8.1.min.css">
</head>
<body>
{{the_div|safe}}
{{the_script|safe}}
</body>
</html>
这里是myapp/urls.py
(错误起源于此。我无法理解为什么导入无法解决):
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from myapp.views import simple_chart
urlpatterns = patterns('myproject.myapp.views',
url(r'^list/$', 'list', name='list'),
url(r'^simple_chart/$', simple_chart, name="simple_chart"),
)
这里是myapp/views.py
:
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from myproject.myapp.models import Document
from myproject.myapp.forms import DocumentForm
from django.shortcuts import render
from bokeh.plotting import figure
from bokeh.resources import CDN
from bokeh.embed import components
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('myproject.myapp.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
def simple_chart(request):
plot = figure()
plot.circle([1,2], [3,4])
script, div = components(plot, CDN)
return render(request, "simple_chart.html", {"the_script":script, "the_div":div})
在花了几天时间仔细阅读 Django 教程后,我看到了他们如何在那里导入视图,因此我将 myapp/urls.py
更改为如下:
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('myproject.myapp.views',
url(r'^list/$', 'list', name='list'),
url(r'^simple_chart/$', views.simple_chart, name="simple_chart"),
)
这会删除 ImportError,但我无法解释原因。
我正在尝试将散景图嵌入到具有上传按钮的 Django 站点中。我正在使用 here as a starting point and then adding on the instructions on embedding from need-a-minimal-django-file-upload-example/for_django_1.8
并且它按预期工作。然后我修改了以下文件,但出现以下错误:
ImportError: No module named 'myapp'
你可以在这里看到我的目录结构和三个文件modified/added:
如果无法加载图片,请点击此处:
.
└── myproject
├── db.sqlite3
├── manage.py
├── media
│ └── documents
│ └── 2016
│ └── 01
│ ├── 12
│ │ └── silico_0_truth_filtered_ptps.csv
│ └── 15
│ └── silico_0_truth_filtered_ptps.csv
└── myproject
├── __init__.py
├── myapp
│ ├── admin.py
│ ├── forms.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ ├── __init__.py
│ │ └── __pycache__
│ │ ├── 0001_initial.cpython-35.pyc
│ │ └── __init__.cpython-35.pyc
│ ├── models.py
│ ├── __pycache__
│ │ ├── admin.cpython-34.pyc
│ │ ├── admin.cpython-35.pyc
│ │ ├── forms.cpython-35.pyc
│ │ ├── __init__.cpython-34.pyc
│ │ ├── __init__.cpython-35.pyc
│ │ ├── models.cpython-34.pyc
│ │ ├── models.cpython-35.pyc
│ │ ├── urls.cpython-35.pyc
│ │ └── views.cpython-35.pyc
│ ├── templates
│ │ ├── list.html
│ │ └── simple_chart.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── __pycache__
│ ├── __init__.cpython-34.pyc
│ ├── __init__.cpython-35.pyc
│ ├── settings.cpython-34.pyc
│ ├── settings.cpython-35.pyc
│ ├── urls.cpython-35.pyc
│ └── wsgi.cpython-35.pyc
├── settings.py
├── urls.py
└── wsgi.py
这里是templates/simple_chart.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Experiment with Bokeh</title>
<script src="http://cdn.bokeh.org/bokeh/release/bokeh-0.8.1.min.js"></script>
<link rel="stylesheet" href="http://cdn.bokeh.org/bokeh/release/bokeh-0.8.1.min.css">
</head>
<body>
{{the_div|safe}}
{{the_script|safe}}
</body>
</html>
这里是myapp/urls.py
(错误起源于此。我无法理解为什么导入无法解决):
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from myapp.views import simple_chart
urlpatterns = patterns('myproject.myapp.views',
url(r'^list/$', 'list', name='list'),
url(r'^simple_chart/$', simple_chart, name="simple_chart"),
)
这里是myapp/views.py
:
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from myproject.myapp.models import Document
from myproject.myapp.forms import DocumentForm
from django.shortcuts import render
from bokeh.plotting import figure
from bokeh.resources import CDN
from bokeh.embed import components
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile=request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('myproject.myapp.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request)
)
def simple_chart(request):
plot = figure()
plot.circle([1,2], [3,4])
script, div = components(plot, CDN)
return render(request, "simple_chart.html", {"the_script":script, "the_div":div})
在花了几天时间仔细阅读 Django 教程后,我看到了他们如何在那里导入视图,因此我将 myapp/urls.py
更改为如下:
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('myproject.myapp.views',
url(r'^list/$', 'list', name='list'),
url(r'^simple_chart/$', views.simple_chart, name="simple_chart"),
)
这会删除 ImportError,但我无法解释原因。