簡體   English   中英

django - 導入錯誤:沒有名為視圖的模塊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM