试在Django上传按钮旁边嵌入Bokeh图时出现ImportE

试在Django上传按钮旁边嵌入Bokeh图时出现ImportE

本文介绍了尝试在Django上传按钮旁边嵌入Bokeh图时出现ImportError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将Bokeh图嵌入到具有上传按钮的Django网站中.我使用的示例以此处为起点,然后加上这里.我使用了need-a-minimal-django-file-upload-example/for_django_1.8,它可以按预期工作.然后,我修改了以下文件,但出现以下错误:

I'm trying to embed a Bokeh plot into a Django site that has an upload button. I'm using the example given here as a starting point and then adding on the instructions on embedding from here. I used need-a-minimal-django-file-upload-example/for_django_1.8 and it works as intended. I've then modified the following files, but I get the following error:

您可以在这里看到我的目录结构,以及修改/添加的三个文件:

You can see my directory structure here and the three files modified/added:

如果无法加载图像,请在此处:

If you cannot load the image, here:

.
└── 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(错误起源于此.我不明白为什么无法解决导入的原因):

Here is myapp/urls.py (The error originates here. I can't understand why the import cannot be resolved):

# -*- 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更改如下:

After spending a few days ploughing through the Django tutorial I saw how they imported views there and thus I changed myapp/urls.py to be as follows:

# -*- 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,尽管我无法解释原因.

This removes the ImportError, though I cannot explain why.

这篇关于尝试在Django上传按钮旁边嵌入Bokeh图时出现ImportError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 04:47