困境
我的 views.py
变得非常难以管理,因此我想将其拆分为应用程序内部的单独的 views
模块。然而,我不确定这是否是一个好主意,原因如下:
如果我的视图文件与应用程序名称相同,我无法导入模型而不使用
django.db.get_model
,因此我担心我的方法可能有缺陷。我听说最好避免在模块内发生名称冲突;我应该重命名我的视图文件吗?我不确定在 Django 社区中创建一个
views
模块是否被认为是良好的实践。
示例
例如,对于名为 blogs
的应用程序,其中包含一个 Blog
模型和一个 Post
模型:
blogs/
__init__.py
models.py
urls.py
views/
__init__.py
blogs.py
posts.py
这是我的 blogs.views.blogs
:
# project/blogs/views/blogs.py
from django.db.models import get_model
from django.shortcuts import get_object_or_404
from django.views.generic import ListView, DetailView
# Cannot import model directly, results in `ImportError: No module named models`.
# This can be resolved if I resolve the name collision between this file and
# the app itself.
#
# from blogs.models import Blog
class BlogListView(ListView):
model = get_model('blogs', 'Blog')
def get_queryset(self):
return self.model.objects.all()
class BlogDetailView(DetailView):
model = get_model('blogs', 'Blog')
def get_object(self):
blog_pk = self.kwargs.get('blog_pk')
return get_object_or_404(self.model.objects, pk=blog_pk)
问题
我有两个问题:
首先,我是否应该分离我的视图?
如果是这样,使用
get_model
是一个好主意吗?还是有一种方法可以直接导入我的模型而不使用这种方法?或者我应该更改我的视图文件名,例如通过添加后缀_views
(例如:blogs.views.blogs_views.py
)以避免整个问题?