【问题标题】:django base template date renderingdjango基础模板日期渲染
【发布时间】:2011-12-22 06:45:03
【问题描述】:

我对 django 很陌生,我有一个简单的问题。希望你能帮我解决这个问题。我有一个像这样的基本模板;

<!doctype html>
<html>
<head>
<title>{% block title %} {% endblock %}</title>
<link type="text/css" rel ="stylesheet" href="style.css" />
<script type="text/javascript" src="jquery.js"> </script>
</head>
<body>
{% block navmenu %} 
{% endblock %}
{% block content %}
{% endblock %}
{% block footer %}
{% endblock  %}
</body>
</html>

当这个模板被一些具有这样结构的中间模板扩展时,

{% extends "base.html" %}
{% block navmenu %}
<ul>
<li>Home</li>
<li>Programming</li>
<li>About</li>
<li>Contact</li>
</ul>
{% endblock %}
{% block footer %}
<h4>Copyright &#169, {{year}} Mel Gibson </h4>
{% endblock %}

这两个模板看起来都非常直接,而我的视图呈现了扩展这个中间模板的不同模板。我这里有一个简单的问题。名为 footer 的块有一个名为 year 的变量。这应该在整个页面中保持不变,所以如果我继续在上下文中传递这个变量,那将是冗余,呈现这个日期的最简单方法是什么,以便它只在代码中传递一次?我可以在 html 文件本身中导入 datetime 对象并在同一模板中构建年份字段以进行显示吗?

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    这就是context processors 的用途。

    【讨论】:

    • 我觉得这也可以用通用视图来完成,你觉得呢?
    【解决方案2】:
    【解决方案3】:

    让我看看我是否明白这一点:年份应该始终是当前年份?不只是一个静态文本,因为那样你会写它,对吗?

    如果您不想将其作为变量传递,那么您可以创建一个 custom template tag 来代替使用。

    或者您可以创建一个所有其他视图类都继承的基础视图类,并添加常用的模板变量,例如年份。

    【讨论】:

    • @insane-36 我的项目中有一些基类,还有很多 mixin,这增加了很多变量。如果你只记得在重写函数时调用super(..., self).xxx(),那不是问题。
    【解决方案4】:

    Django 对此用例有支持的解决方案:RequestContext

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 2016-04-20
      • 2017-01-31
      • 2017-05-21
      • 1970-01-01
      • 2013-01-21
      • 2014-06-09
      相关资源
      最近更新 更多