尝试在Django上传按钮旁边嵌入Bokeh图时的ImportError

时间:2016-01-12 11:26:26

标签: python django bokeh

我试图将一个Bokeh图嵌入一个有上传按钮的Django网站。我使用给定here的示例作为起点,然后添加有关here嵌入的说明。我使用了need-a-minimal-django-file-upload-example/for_django_1.8,它按预期工作。我之后修改了以下文件,但是我收到以下错误:

  

ImportError:没有名为' myapp'

的模块

您可以在此处查看我的目录结构以及修改/添加的三个文件:

Directory structure

如果您无法加载图片,请点击此处:

.
└── 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.pydata.org/bokeh/release/bokeh-0.8.1.min.js"></script>
    <link rel="stylesheet" href="http://cdn.pydata.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})

1 个答案:

答案 0 :(得分:0)

花了几天时间浏览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,但我无法解释原因。