Python 在Django中创建通用视图
好吧,我是Django的新手,但不熟悉MVC世界(在Grails中构建了一些应用程序)……但我似乎和一群人有着同样的问题,我希望有人能真正了解Django基于类的通用视图。在Grails世界中,框架可以生成“模板”或通用视图,我相信Django也是如此,但如果您遵循1.7“编写第一个Django应用程序”,那么似乎缺少了一些特殊的魔力 我有以下项目/应用程序结构:Python 在Django中创建通用视图,python,django,Python,Django,好吧,我是Django的新手,但不熟悉MVC世界(在Grails中构建了一些应用程序)……但我似乎和一群人有着同样的问题,我希望有人能真正了解Django基于类的通用视图。在Grails世界中,框架可以生成“模板”或通用视图,我相信Django也是如此,但如果您遵循1.7“编写第一个Django应用程序”,那么似乎缺少了一些特殊的魔力 我有以下项目/应用程序结构: mysite ->mysite ->settings.py -&g
mysite
->mysite
->settings.py
->urls.py
->_init_.py
->wsgi.py
->polls (my app)
->models.py
->urls.py
->views.py
->templates
->polls
在本教程中,我们被要求在templates->polls目录中创建index.html、details.html、results.html文件,这些文件中有一些简单的html视图。这一切都很好。一旦我在中开始“使用通用视图:代码越少越好”,我就会遇到麻烦。假设我应该简单地从templates文件夹中删除index.html、details.html、results.html文件,并且Django应该动态生成视图,这是错误的吗?我认为这是一般观点的观点,但现在我不确定。当我删除视图时,会出现templatedoesnotexist错误。我是否需要对我的settings.py做些什么,让它知道我希望django生成视图?以下是标准生成的设置(我就是这么做的),我假设这些设置足以执行默认行为
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DEBUG = True
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates/'),]
如果您需要我提供更多信息,请让我知道,但基本上我想知道我是否偏离了Django从模板生成视图的假设?谢谢大家! 你只是对Django的术语有点困惑。几乎所有视图都使用模板来呈现发送回浏览器的实际标记(HTML、XML等) Django泛型视图只是编写自己的函数视图的基于类的版本。因此,与其说:
def show_template_with_data(request):
template = "myapp/show_data.html"
return render(request, template, {'data1': 1, 'data2': 2})
您可以使用Python类和OO并执行以下操作:
class ShowTemplateWithData(TemplateView):
template_name = "myapp/show_data.html"
def get_context_data(self, **kwargs):
context = super(ShowTemplateWithData, self).get_context_data(**kwargs)
context['data1'] = 1
context['data2'] = 2
return context
这两个是等价的,一个只是使用函数,另一个是基于类的视图
在Django中,视图是确定所采取的操作、为模板提供的数据(例如,基于登录用户)等的代码。“模板”只是带有显示它的占位符/循环等的HTML
但是不,您不应该删除模板HTML文件,这两种样式的视图都需要它们。谢谢您,弗兰克!我认为Django可能是自动生成的(比如grails生成所有mydomainclass),谢谢您的澄清。非常感谢!!!