[英]django - import error: no module named 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<moment_id>\d+)/$', "views.detail", name='detail'),
)
我的 moment_app 文件夾中顯然有一個名為 views 的模塊。 此外, moment_app 在我的道路上。 有沒有人對可能導致這種情況的原因有任何想法?
您使用相對模塊名稱作為路由名稱的前綴。 使用絕對名稱:
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'),
)
兩年更新:
在 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'),
]
您已將視圖導入為
from moments_app import views
有時它不起作用。
用這個
from moments_app.views import *
urlpatterns = patterns('',
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'),
)
它會工作..
只需將導入語句更改為
import appname.views
這適用於我的代碼。
我遇到了這個問題並嘗試了上面的答案,但問題是我在views.py中的“render”函數中缺少一個字符串引用,我錯過了它並且在urls.py中遇到了問題,它指出沒有模塊“views”存在在“投資組合”(應用程序名稱)中。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.