我最近开始采用 Python 和 Django 框架。它有很多很棒的东西,也有很多我真正讨厌的东西。其中之一是views.py
每个 Django 应用程序只有一个文件,我觉得这真的不切实际。所以我决定把我的观点分成多个文件。事实证明,这比我最初想象的要困难得多。
我遵循了很多问题和教程,但没有一个有效。我应该补充一点,我在 ArchLinux 和 Django 1.8 上使用 Python 3.4。
我原来的设置(我已经简化了,实际上还有更多的视图功能):
视图.py
def entries(request):
...
def delete_entry(request, id):
...
def categories(request):
...
def delete_category(request, id):
...
网址.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 文件。
条目.py
def entries(request):
...
def delete_entry(request, id):
...
类别.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
,消息ViewDoesNotExists
会引发错误Could not import 'transactions.views.entries'. View is not callable.
。当我尝试转储entries.entries
时urls.py
,它实际上是一个函数,与原始设置相同。
到目前为止,我已经尝试了这个问题的许多建议,例如导入变体、__init.py__
在视图文件夹中进行黑客攻击、使用没有 的视图文件夹__init__.py
,但结果几乎相同或存在导入错误。