【问题标题】:Different ways of calling render() in Django在 Django 中调用 render() 的不同方法
【发布时间】:2018-07-05 03:20:56
【问题描述】:

我很难理解 render() 的工作原理。我已阅读有关该功能的功能的帖子,但仍有未解决的问题。

在 Django Docs 中阅读它,并查看源代码,它不是属于任何类的方法。相反,它和其他许多函数一样是一个函数,并且需要多个参数(request、template_name 等)。

虽然,在Django Book 中,它被声明为可以在模板对象上调用的方法。也就是说,您可以实例化一个对象,并立即使用某些上下文调用该对象的渲染方法。我之前使用它时没有指定任何模板名称,只是在具有某些上下文的模板对象上调用它,如前所述。

当它可以像模板类的方法一样在模板对象上调用时,为什么文档将它描述为一个独立的函数,而不属于一个类?为什么我在任何地方都找不到模板类?我错过了什么?

【问题讨论】:

  • 我不确定您对什么感到困惑。有两种不同的东西叫做渲染;一个独立的函数,以及由该函数调用的 Template 类上的一个方法。
  • 这是有道理的。真的没想到。我在哪里可以找到模板类?我在 StackOverflow 上找不到一篇关于它的帖子,而且很难在 Docs 中找到它!
  • 根据我的经验,您很少直接与Template 对象交互,但是:docs.djangoproject.com/en/2.0/topics/templates
  • 我敢肯定!为什么可以这样实例化:a = Template('template-text')?有实际的模板类吗?使用方法渲染?在您链接的网站上,我看不到有关其中任何一个问题的信息。如果我错了,请纠正我!
  • 从字符串加载...嗯,你不会。但是,如果出于某种原因需要,您可以直接调用模板引擎来获取Template 实例,如下所示,使用from_stringdocs.djangoproject.com/en/2.0/topics/templates/…

标签: python django templates render


【解决方案1】:

你问了模板类,我们在Django中通常使用的是TemplateView类,你可以在其中提供template_name

还值得一提的是,这本书很老了。它指的是版本 0.96(您可以在第 7 页查看),而最新的 Django 版本是 2.0。 从那以后发生了很多变化,所以我不建议在较新的版本中使用它。

【讨论】:

  • 你说这本书很旧是对的,但是模板对象和TemplateView基于类的视图之间有很大的不同。
  • 我注意到它已经很老了,但是许多概念似乎或多或少是相同的。我写这本书的目的实际上是为了更好地理解框架的基本概念,并且它确实为此提供了很好的信息。为了澄清,模板对象是语言的过时方面吗?我完全知道这不常用,但我真的只是想学习。
  • @PeterDeGlopper 是的,我很惊讶(和你一样)OP 出于某种原因想要直接与 Template 类交互,我从来没有这样做过,也不确定 OP 是否知道标准使用基于类的视图。但我应该提到这一点。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多