【问题标题】:Getting block by name in django template language在 Django 模板语言中按名称获取块
【发布时间】:2012-12-09 11:55:11
【问题描述】:

我正在使用 django (1.4) 开发我的网站。 我无法通过名称获取块(以便对其进行编辑)。

在从我的基本模板继承的每个模板中,我都分配了一个字符串 blockname。我想将一些文本放在一个特定的块中(在扩展模板中定义),其名称等于变量 blockname 的内容。

编辑:

例子

base.html

{% block b1 %}no changes{% endblock %}
{% block b2 %}no changes{% endblock %}
{% block b3 %}no changes{% endblock %}

subpage.html

???

显示 subpage.html 的视图如下:

def show_subpage(request):
    t = loader.get_template('subpage.html')
    c = RequestContext(request, {'blockname': 'b2'})
    return HttpResponse(t.render(c))

应该有如下结果:

没有变化 CHANGE 没有变化

我怎样才能做到这一点?

【问题讨论】:

  • 向我们展示您正在努力实现的目标,
  • django 确实支持嵌套块,如果这是您正在寻找的。​​span>
  • 而且它还支持 {% if %} 不管什么 {% endif %}。请举个具体的例子,说明什么起作用/不起作用。

标签: django django-templates


【解决方案1】:

如果我理解你的话,这就是你想要的......

def show_subpage(request):
    t = loader.get_template('subpage.html')
    c = RequestContext(request, {'blockname': ' Change '})
    return HttpResponse(t.render(c))

子页面.html

{% extends 'base.html' %}

{% block b2%}{{ blockname }}{% endblock %}

【讨论】:

  • 我可以在模板中显示一个变量——这没什么特别的。我尝试将一些文本放入父模板的块之一中,但事先我不知道在哪个块中。它在传递给模板的变量 blockname 中定义(该变量的值是将要更改的块的名称)。 F.e.如果 blockname = b2,则应该更改名称为 b2 的块,但如果 blockname = b100,则块名称为 b100 必须改变。
  • 啊。我明白你现在在问什么......但我认为不可能干净地做到这一点。我可以建议的最好的方法是模板中的一堆 if 语句。这有什么用例?也许我们可以想出一个更好的方法来做你想做的事。
  • 每个模板都扩展了基本模板,其中有一个用于整个网站的菜单。在每个模板中,我都有一个变量定义您当前所在网站的部分。我在这个菜单中有钩子(作为块标签),以便有可能定义每个按钮/链接的类。我可以将字符串 "active" 放在每个模板中的适当块中,但是将来忘记更改它会导致错误。我想要一个解决方案,您只需将一些代码放入基本模板中 - 此代码应使用当前部分的变量来用字符串 "active" 填充适当的书签钩子。
猜你喜欢
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多