inclusion_tag 组件

{% for item in data %}
    <li {% if item.class %} class="{{ item.class }}" {% endif %}>

        <a href="{{ item.url }}" > {{ item.name }} </a>
    </li>
{% endfor %}
menu_list.html
    <li class="dropdown active">
        <a href="#" class="active dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
           aria-expanded="false">项目{% if request.tracer.project %}({{ request.tracer.project.name }}){% endif %} <span class="caret"></span></a>


        <ul class="dropdown-menu">
            {% if my %}
                <li><i class="fa fa-list" aria-hidden="true"></i> 我创建的项目</li>
                {% for item in my %}
                    <li><a href="{% url "dashboard" project_id=item.id %}">{{ item.name }}</a></li >
                {% endfor %}

                <li role="separator" class="divider"></li>
            {% endif %}
            {% if join %}
                <li><i class="fa fa-handshake-o" aria-hidden="true"></i> 我参与的项目</li>

                {% for item in join %}
                    <li><a href="{% url "dashboard" project_id=item.project.id %}">{{ item.project.name }}</a></li >
                {% endfor %}
                <li role="separator" class="divider"></li>
            {% endif %}

        <li><a href="{% url "project_list" %}">所有项目</a></li >

        </ul>
    </li>
all_project_list.html
from django import template
from web import models
from django.urls import reverse

register = template.Library()

@register.inclusion_tag("inclusion/all_project_list.html")
def all_project_list(request):
    user_obj = request.tracer.user
    # 获取项目列表
    my_project = models.Project.objects.filter(creater=user_obj).all()

    join_project = models.ProjectUser.objects.filter(user=user_obj).all()

    return {"my":my_project,"join":join_project,"request":request}

@register.inclusion_tag("inclusion/menu_list.html")
def menu_list(request):
    project_id = request.tracer.project.id
    data = [
        {"name":"概览","url":reverse("dashboard",kwargs={"project_id":project_id})},
        {"name":"wiki","url":reverse("wiki",kwargs={"project_id":project_id})},
        {"name":"统计","url":reverse("statistics",kwargs={"project_id":project_id})},
        {"name":"问题","url":reverse("issues",kwargs={"project_id":project_id})},
        {"name":"文件","url":reverse("file",kwargs={"project_id":project_id})},
        {"name":"设置","url":reverse("setting",kwargs={"project_id":project_id})},
    ]

    #如果选中该url,则添加类active
    for item in data:
        if request.path_info.startswith(item.get("url")):
            item["class"]="active"

    return {"data":data}
project.py
{% load project %}

{% all_project_list request %} {% menu_list request %}
原文地址:https://www.cnblogs.com/hude/p/12826071.html