django - 导入错误:没有模块命名视图

 同步管理精英 发布于 2023-01-30 10:00

我一直绞尽脑汁,无法弄清楚为什么在导入'views'时会出现导入错误.当我访问索引页面时收到以下消息:

"
Request Method: GET
Request URL:    http://127.0.0.1:8000/moments/
Django Version: 1.6.1
Exception Type: ImportError
Exception Value:    
No module named views
Exception Location: C:\Python27\lib\site-packages\django\utils\importlib.py in import_module, line 40
"

这是我的urls.py

from django.conf.urls import patterns, url

from moments_app import views

urlpatterns = patterns('',
    url(r'^$', "views.index", name='index'),
    url(r'^$', "views.choose_dataset", name='choose'),
    url(r'^get_moments/', "views.get_moments", name='get_moments'),
    url(r'^learn/$', "views.learn", name='learn'),
    url(r'^(?P\d+)/$', "views.detail", name='detail'),

)

我在moments_app文件夹中显然有一个名为views的模块.此外,moments_app在我的道路上.有没有人对可能导致这种情况的原因有任何想法?

2 个回答
  • 两年更新:

    在Django 1.8及更高版本patterns中,不推荐使用字符串视图和函数,从而使语法更简单,更可靠:

    from django.conf.urls import url
    
    from . import views
    
    urlpatterns = [
        url(r'^$', views.index, name='index'),
        url(r'^$', views.choose_dataset, name='choose'),
        url(r'^get_moments/', views.get_moments, name='get_moments'),
        url(r'^learn/$', views.learn, name='learn'),
        url(r'^(?P<moment_id>\d+)/$', views.detail, name='detail'),
    ]
    

    请注意,没有带有可调用语法的"相对"或"绝对"视图名称 - 如果导入views模块,则会获得其定义.我会避免导入单个视图函数,因为另一个导入很可能会定义一个碰撞名称.如果您不担心冲突并且不介意将您的应用名称放在文件中,则可以略微缩短网址:

    from moments_app.views import index, choose_dataset, get_moments, learn, detail
    
    urlpatterns = [
        url(r'^$', index, name='index'),
        url(r'^$', choose_dataset, name='choose'),
        url(r'^get_moments/', get_moments, name='get_moments'),
        url(r'^learn/$', learn, name='learn'),
        url(r'^(?P<moment_id>\d+)/$', detail, name='detail'),
    ]
    

    2023-01-30 10:03 回答
  • 您使用相对模块名称为路由名称添加前缀.使用绝对名称:

    urlpatterns = patterns('',
        url(r'^$', "moments_app.views.index", name='index'),
        url(r'^$', "moments_app.views.choose_dataset", name='choose'),
        url(r'^get_moments/', "moments_app.views.get_moments", name='get_moments'),
        url(r'^learn/$', "moments_app.views.learn", name='learn'),
        url(r'^(?P<moment_id>\d+)/$', "moments_app.views.detail", name='detail'),
    )
    

    或者更好的是,使用第一个参数指定完整的模块路径:

    urlpatterns = patterns('moments_app.views',
        url(r'^$', "index", name='index'),
        url(r'^$', "choose_dataset", name='choose'),
        url(r'^get_moments/', "get_moments", name='get_moments'),
        url(r'^learn/$', "views.learn", name='learn'),
        url(r'^(?P<moment_id>\d+)/$', "detail", name='detail'),
    )
    

    虽然也允许两者的组合:

    urlpatterns = patterns('moments_app',
        url(r'^$', "views.index", name='index'),
        url(r'^$', "views.choose_dataset", name='choose'),
        url(r'^get_moments/', "views.get_moments", name='get_moments'),
        url(r'^learn/$', "views.learn", name='learn'),
        url(r'^(?P<moment_id>\d+)/$', "views.detail", name='detail'),
    )
    

    2023-01-30 10:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有