【问题标题】:Django: How to import variables in html templatesDjango:如何在 html 模板中导入变量
【发布时间】:2011-05-03 14:13:55
【问题描述】:

我有一个 django 应用程序,我想做的是更改模板中显示“公司 ID”的任何位置。这可能会非常乏味,因为我必须在每个显示“公司 ID”的模板中进行此更改。所以我想我可以创建另一个文件来存储这个条目,我可以很容易地自定义公司 ID。

config.py

company_no = "Company id"

这可以在我的 forms.py 文件中使用。我可以通过说来导入company_no

forms.py

from mmc.config import company_no

但是我怎样才能对模板做同样的事情呢?在模板中导入 company_no - 有办法吗?

【问题讨论】:

  • 没有 Django 专家,但你不能用那个变量作为参数来渲染模板吗?这就是 Flask 所做的。
  • @Blender Django 也这样做 - 但我想更改我的程序中每个显示“公司 ID”的文本。我认为如果我可以将一些值放入配置文件中并且每次在我的程序中都可以命令说“公司 ID”时它会起作用。

标签: python html django variables


【解决方案1】:

这就是context processors 的用途。在 settings.py 中定义您的公司名称,然后编写一个上下文处理器,从那里导入它并在字典中返回它 - 然后它将在每个模板中都可用(只要您使用 RequestContext 呈现模板)。

【讨论】:

  • Company Id 不是变量。它基本上是我在许多表格中作为标题输入的内容。但是如果想编辑公司 ID 并将其更改为Marks company,那么遍历每个模板并进行更改将是乏味的。如果我能做出改变,那会很有帮助。
  • 但这就是我所说的!在 settings.py 中定义它,然后使用上下文处理器将其添加到每个模板中。这与您的要求有何矛盾?
【解决方案2】:

正如 Blender 所说,您需要在渲染模板时将这样的变量作为上下文的一部分传递。您可以创建一个字典或命名元组,其中包含存储在配置中的常用项目加载到函数中。

如果许多模板将显示相同的数据,您还应该考虑使用模板继承,那么您可以使用一些方法来加载与某些基本模板一起使用的上下文片段。

【讨论】:

  • 公司 ID 不是变量。它只是我模板中的纯文本(如标签)。因此,如果我想更改所有显示Company Id 的纯文本。我想创建某种文件,我可以将此标签存储在另一个文件中,然后如果我需要进行任何更改,我可以通过编辑一些配置文件来更快地进行更改。
  • 我建议您将其从配置中加载到变量中,然后在呈现模板时将其传递到上下文中。
  • 顺便说一句,如果在每个(或几乎每个)模板中都使用了某些值,我会使用 Cez 和 Daniel 描述的上下文处理器方法。
【解决方案3】:

您可以创建一个共享模板并使用include 将其加载到主模板中。然后在共享模板中,您可以加载并调用custom template tag,它会生成一个上下文变量并像往常一样呈现它。

或者,您可以创建一个custom context processor,将数据自动加载到上下文实例中,然后像往常一样在共享模板中呈现它。

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 2021-03-14
    • 2013-05-26
    • 1970-01-01
    • 2014-08-09
    • 2016-04-22
    • 2018-02-05
    • 2021-09-15
    • 2012-12-11
    相关资源
    最近更新 更多