分解Django模板中的标题菜单

Rob*_*bin 3 navigation django django-templates django-views

我正在使用django构建一个网站,每个页面顶部都有一个标题,基本上是一个带有几个链接的菜单,在整个页面中保持不变.

但是,根据您所在的页面,我想通过添加"活动"类来突出显示菜单上的相应链接.为此,我目前正在执行以下操作:每个页面都有一个完整的菜单块,它集成在一般布局中,不包含菜单.例如,page2看起来像这样:

{% extends "layout.html" %}
{% block menu %}
<li><a href="{% url 'myapp:index' %}">Home</a></li>
<li><a href="{% url 'myapp:page1' %}">page1</a></li>
<li class="active"><a href="{% url 'myapp:page2' %}">page2</a></li>
<li><a href="{% url 'myapp:page3' %}">page3</a></li>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

问题是,除了那个解决方案不那么漂亮之外,每次我想要添加一个链接到标题菜单时,我必须修改我拥有的每一个页面.由于这远非最佳,我想知道你们中是否有人会知道更好的方法.

提前致谢!

Dmi*_*nko 6

您可以创建自定义模板标签:

from django import template
from django.core.urlresolvers import reverse, NoReverseMatch, resolve

register = template.Library()

@register.simple_tag
def active(request, view_name):
    url = resolve(request.path)
    if url.view_name == view_name:
        return 'active'
    try:
        uri = reverse(view_name)
    except NoReverseMatch:
        uri = view_name
    if request.path.startswith(uri):
        return 'active'
    return ''
Run Code Online (Sandbox Code Playgroud)

并在模板中使用它来识别URL加载的页面

<li class="{% active request 'car_edit' %}"><a href="{% url 'car_edit' car.pk %}">Edit</a></li>
Run Code Online (Sandbox Code Playgroud)