我是 Django 的新手(现在已经编写 Python 一段时间了),我想知道是否可以在 Django 中使用 View 和表单框架而不需要数据库或使用模型.
内容是动态的,每次用户启动网站时都会填充到字典中。所以我想利用 Django View 和表单,但通过字典而不是模型类(数据库)传递详细信息
我希望我的解释是正确的。
所以要添加到这个上。
如果您有以下基于模型的类:
class TestClass(models.Models):
var1 = models.CharField(....)
class DetailView(generic.DetailedView):
model = TestClass
我如何使用 DetailView 类(或任何其他基于 django 的 View 框架以及基于类的字典,如下所示:
class TestObj(object):
def __init__(self):
self.var1 = []
testdict = defaultdict(TestObj)
testdict['test'].var1 = ['blah']
我是否只在 DetailView 类下的模型字段中使用字典?
如有错误,请多多包涵。
谢谢
请您参考如下方法:
完全有可能。
但是,如果您决定不使用数据库,您将失去使用许多 contrib 功能(如帐户、后端)的机会。从“空”项目(使用 django-admin startproject 制作)中,您需要删除大部分 INSTALLED_APPS、MIDDLEWARE、context_processors 在 TEMPLATE 中,将 DATABASES 设置为一个空的 dict() (请参阅@spectras 的评论),也许其他一些设置正在修补在上面。
更新: (由于您对问题进行了重大修改,这里有更多详细信息)
如果没有数据库,使用 django.db.models 没有多大意义(注意 models 包路径中的 db ).一些通用 View (如 DetailView)是为了节省您使用模型的时间,因此使用它们也没有多大意义。
如果您不需要保存任何 TestClass 实例,并且它们的生命周期仅限于生成对单个用户请求的响应,那么根本不使用 django 模型应该没问题。使用 TemplateView就足够了。
class TestClass(object):
def __init__(foo, bar):
self.foo, self.bar = foo, bar
class MyView(TemplateView):
template_name = 'my_template.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['my_object'] = TestClass(foo="hello", bar="world")
return context
在 my_template.html 中:
{{ my_object.foo }} {{ my_object.bar }}
