【问题标题】:Can a django template find out its named url or can a base template know which template is extending it?django 模板能否找到其命名的 url,或者基础模板是否可以知道哪个模板正在扩展它?
【发布时间】:2011-12-17 05:43:14
【问题描述】:

在我的 URLConf 中,我的 URL 被整齐地命名,这样我就可以进行反向查找并保持一切干燥。

我所有的模板都扩展了一个名为base.html 的通用模板。在base.html,在很多HTML框架中,我显示了一个登录表单。

我还有一个特定的视图,它使用 Django 提供的 auth_views.login 视图,它显示了我的自定义模板 login.html。与所有其他模板一样,此模板扩展了 base.html 模板。

在这种情况下,我希望base.html 模板不会显示其登录表单(login.html 模板已经在显示登录表单)。为此,base.html 要么需要知道它正在用于扩展 login.html,要么需要知道导致 base.html 被扩展的命名 URL 的名称为 'myapp-login'

您能建议一种方法吗?我正在考虑编写自己的视图,该视图将调用 auth_views.login 并带有额外的上下文,其中包括 suppress_header_login_form var。基于这个变量,base.html 模板可以抑制登录表单。但是,我正在尝试看看是否有更好的方法来实现这一点。

【问题讨论】:

  • 也许这个问题对你有帮助:stackoverflow.com/questions/2882490/…
  • 非常接近。但是,我的问题是这个特定的模板是从 TemplateView 调用的。在这种情况下,请求没有传递给模板,也没有办法通过它获取 URL。

标签: python django django-templates


【解决方案1】:

您可以使用模板继承和块来管理它。

您的base.html 定义了一个名为login 的块,它围绕着用于登录的HTML - 而您的login.html 用一个空版本覆盖了该块:

base.html:

{% block login %}
    ... login form here ...
{% endblock %}

{% block main %}
{% endblock %}

login.html:

{% extends "base.html" %}

{% block login %}
{% endblock %}

{% block main %}
   ... real login form here ...
{% endblock %}

【讨论】:

  • 没想到这个。不错的建议。解决问题。我将把这个开放一点,因为我很好奇是否有一种方法可以实际检查我在原始帖子中提到的内容。
猜你喜欢
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
相关资源
最近更新 更多