Django:将参数传递给父模板

Bor*_*ris 24 django django-templates

我有这种风格的模板

project
- main_templates (including nav bar)
-- app1
--- app1_base_template
--- app1_templates
-- app2
--- app2_base_template
--- app2_templates
Run Code Online (Sandbox Code Playgroud)

因此,在渲染时,app2_templates扩展了扩展main_template的app2_base_template.

我需要做的是,在渲染app2的模板时将相应的导航项设为粗体(以向用户显示他所在的位置).

如果我可以传递{%block xxx%}部分中的变量,那么最简单的方法就是这样.这可能吗 ?

还有哪些其他通用方法?

cza*_*aic 43

您是否尝试过{%with%}模板标记?

{% block content %}
  {% with 'myvar' as expectedVarName %}
  {{block.super}}
  {% endwith %}
{% endblock content %}
Run Code Online (Sandbox Code Playgroud)

  • 有趣的黑客,但不是一个完整的解决方案.父模板需要大部分用`{%block content%}'包围才能使用,这可以防止我覆盖`content`中的另一个块. (3认同)

Jar*_*die 9

没有直接的方法可以按照您描述的方式将变量传递给模板继承树.人们实现突出显示当前页面的导航栏的方式通常会根据网站本身的性质进行调整.那就是说,我见过两种常见的方法:

低技术方法

在模板上下文中传递一个变量,指示哪个选项卡处于活动状态:

# in views.py
def my_view(request):
    return render_to_response('app2_template.html', {"active_tab": "bar"},

<!-- Parent template -->
<div id="navigation">
    <a href="/foo" {% ifequal active_tab "foo" %}class="active"{% endifequal %}>Foo</a>
    <a href="/bar" {% ifequal active_tab "bar" %}class="active"{% endifequal %}>Bar</a>
</div>
Run Code Online (Sandbox Code Playgroud)

高科技的方法

实现自定义模板标记以呈现导航栏.让标记采用一个变量来指示哪个部分处于活动状态:

<!-- Parent template -->

<div id="navigation">{% block mainnav %}{% endblock %}</div>

<!-- any child template -->
{% load my_custom_nav_tag %}
{% block mainnav %}{% my_custom_nav_tag "tab_that_is_active" %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)

你可以从那里疯狂.你可能会发现某人已经在djangosnippets.org上实现了适合你的东西.