在Django中包含几个模板的菜单

sum*_*pen 1 python django templates view

我试图不在不同的模板上两次编写相同的代码.改变一些事情真的很麻烦.

因此,当我访问网页的某个部分时,我想显示一个侧边菜单.这个侧面菜单假设在几个模板上.像index.html,detail.html,manage.html等.

但该部分只是网页的一部分,所以我不能在base.html中使用它.

我在考虑使用include.但由于侧边菜单依赖于要生成的数据库查询,因此我必须对每个视图进行查询.这也使得冗余代码.

此功能的最佳做法是什么?

干杯!

Aam*_*nan 5

您可以编写自定义的inclusion_tag,这对于该场景更为可行:

程序my_app/templatetags/my_app_tags.py

from django import template

register = template.Library()

@register.inclusion_tag('side_menu.html')
def side_menu(*args, **kwargs):
    # prepare context here for `side_menu.html`
    ctx = {}
    return ctx
Run Code Online (Sandbox Code Playgroud)

然后在任何模板中要包含侧边菜单,执行以下操作:

{% load side_menu from my_app_tags %}

{% side_menu %}
Run Code Online (Sandbox Code Playgroud)