尝试在 Django 上传按钮旁边嵌入散景图时出现 ImportError

Posted

技术标签:

【中文标题】尝试在 Django 上传按钮旁边嵌入散景图时出现 ImportError【英文标题】:ImportError when trying to embed a Bokeh plot alongside a Django upload button 【发布时间】:2016-04-16 23:53:16 【问题描述】:

我正在尝试将散景图嵌入到具有上传按钮的 Django 网站中。我使用here 给出的示例作为起点,然后添加来自here 的嵌入说明。我使用了need-a-minimal-django-file-upload-example/for_django_1.8,它按预期工作。然后我修改了以下文件,但出现以下错误:

ImportError: 没有名为“myapp”的模块

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

如果无法加载图片,请看这里:

.
└── 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)

【问题讨论】:

我很困惑。我的问题怎么不是现有的编程问题? 不是编程问题,这里没有问题要解决,你找人给你写代码 我的问题真的和这个有很大不同吗? ***.com/questions/5871730/… 编辑:如果有帮助,请更新标题 这个问题大约有 4 年的历史了,从那时起整个社区都发生了变化,如果它让你感觉好些,我也投票决定关闭那个问题。 删除了我的评论,感谢您改进您的问题。 【参考方案1】:

花了几天时间浏览 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 上传按钮旁边嵌入散景图时出现 ImportError的主要内容,如果未能解决你的问题,请参考以下文章

在 django 中使用交互式控件制作散景图

Django中的散景图返回空白页

在Flask中嵌入散景图

无法将散景图嵌入到 Flask 应用程序中

散景内联嵌入,“加载资源失败”

散景图上的多个滑块