【发布时间】:2015-09-13 12:27:14
【问题描述】:
我最近开始采用 Python 和 Django 框架。它有很多很棒的东西,也有很多我真正讨厌的东西。其中之一是每个 Django 应用程序有一个 views.py 文件,我觉得这真的不切实际。所以我决定把我的观点分成多个文件。事实证明,这比我最初想象的要困难得多。
我遵循了很多问题和教程,但没有一个有效。我应该补充一点,我在 ArchLinux 和 Django 1.8 上使用 Python 3.4。
我原来的设置(我已经简化了,其实还有更多的视图功能):
views.py
def entries(request):
...
def delete_entry(request, id):
...
def categories(request):
...
def delete_category(request, id):
...
urls.py
from django.conf.urls import patterns, url
from transactions import views
urlpatterns = patterns('',
url(r'^entries$', views.entries, name='entries'),
url(r'^delete_entry(?:/(?P<id>[0-9]+)/)?$', views.delete_entry, name='delete_entry'),
url(r'^categories$', views.categories, name='categories'),
url(r'^delete_category(?:/(?P<id>[0-9]+)/)?$', views.delete_category, name='delete_category'),
)
我想要的状态是:
包含 entries.py 和 categories.py 的视图文件夹:
编辑:在views文件夹中有一个init.py文件。
entry.py
def entries(request):
...
def delete_entry(request, id):
...
categories.py
same logic as above
我在此设置中使用的 urls.py:
from transactions.views import entries, categories
from django.conf.urls import patterns, url
urlpatterns = patterns('',
url(r'^entries$', entries.entries, name='entries'),
url(r'^delete_entry(?:/(?P<id>[0-9]+)/)?$', entries.delete_entry, name='delete_entry'),
url(r'^categories$', categories.categories, name='categories'),
url(r'^delete_category(?:/(?P<id>[0-9]+)/)?$', categories.delete_category, name='delete_category'),
)
当我尝试使用manage.py runserver 时,Could not import 'transactions.views.entries'. View is not callable. 消息会引发ViewDoesNotExists 错误。当我尝试将entries.entries 转储到urls.py 时,它实际上是一个函数,与原始设置相同。
到目前为止,我已经尝试了来自this 问题的许多建议,例如导入变体、在视图文件夹中破解__init.py__、使用没有__init__.py 的视图文件夹,但结果几乎相同或存在导入错误。
【问题讨论】:
-
views文件夹中有名为__init__.py的文件吗? -
把
__init__.py放到views文件夹中。 -
错误
Could not import 'transactions.views.entries'与您的新 urls.py 和视图布局不匹配。确保您已删除所有旧的 pyc 文件,并重新启动服务器。 -
@giaosudau 很抱歉回复晚了,有一段时间没有在我的电脑上。我确实在视图目录中有一个 init.py 文件(尝试使用和不使用它,尝试在 init.py 中导入视图,但没有成功)。
-
@Alasdair 我尝试删除项目中的所有 *.pyc 文件和所有 pycache 目录。仍然没有运气 - 同样的错误。我也很奇怪,路径是模块的,而不是函数的。如果我尝试转储entrys.entries,它会正确显示
标签: python django django-views django-1.8