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

时间:2017-09-18 20:34:46

标签: python django templates view

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

所以,当我转到网页的某个部分时,我想显示一个侧边菜单。这个侧面菜单假设在几个模板上。与index.html,detail.html,manage.html等一样。

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

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

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

干杯!

1 个答案:

答案 0 :(得分: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

然后在任何模板中你想要包含侧面菜单:

{% load side_menu from my_app_tags %}

{% side_menu %}