Skip to main content
 首页 » 编程设计

python之在没有基于模型的数据库的情况下使用 Django View 和表单

2024年10月17日33lori

我是 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 }}