Django:如何获取正在呈现的模板的名称

E.Z*_*.Z. 7 django django-templates navbar twitter-bootstrap twitter-bootstrap-3

我实现一个自举 navbar的这个例子作为展示在这里

导航栏中的项目是<li>'s"已选择"项目具有以下属性class="active":

  <li class="active"> <a href="#"> Link1 </a> </li>
  <li>                <a href="#"> Link2 </a> </li>
Run Code Online (Sandbox Code Playgroud)

在Django中,这些项目将位于模板中,该模板将包含任何应显示导航栏的模板.我正在考虑这样做:

<li> <a href="/"        class="{% if template_name == "home.djhtml"    %}active{% endif %}"> Home    </a> </li>
<li> <a href="about/"   class="{% if template_name == "about.djhtml"   %}active{% endif %}"> About   </a> </li>
<li> <a href="contact/" class="{% if template_name == "contact.djhtml" %}active{% endif %}"> Contact </a> </li>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有内置的方法来获取template_name(即,正在渲染的模板,传递给render_to_response(),views.py)

当然,我可以明确地添加一个template_name变量render_to_response(),这将解决问题.但考虑到DRY我觉得不应该这样做.

Kev*_*one 14

我通常使用自定义模板标记来为活动选项卡,菜单项等添加类的用例.

@register.simple_tag
def active_page(request, view_name):
    from django.core.urlresolvers import resolve, Resolver404
    if not request:
        return ""
    try:
        return "active" if resolve(request.path_info).url_name == view_name else ""
    except Resolver404:
        return ""
Run Code Online (Sandbox Code Playgroud)

这是来自顶级导航的片段:

<ul class="nav">
    <li class="{% active_page request "about" %}"><a href="{% url "about" %}">About</a></li>
    ...
</ul>
Run Code Online (Sandbox Code Playgroud)