通常在寫網頁的菜單的時候采用的都是統一的導航欄。需要一個base頁面,其他頁面就繼承base頁面。base頁面中的導航條是從數據庫中獲取。通過djano渲染到base頁面。但是其他頁面直接繼承base頁面是獲取不到導航條的動態數據的。采用重寫render的方法解決這個問題。
1.在django的項目的中新建一個py文件,創建一個工具類。
from django.shortcuts import render
from net import models #從app中導入數據庫
class RenderWrite(object): #新建一個工具類
def render_template(request, template_name, context=None, content_type=None, status=None, using=None):
p_list = []
c_list = []
cate = models.OdooCategory.objects.all()
for c in cate:
data = {
'name': c.name,
'id': c.id
}
pro = models.OdooProducts.objects.filter(odoocategory=c.id)
for p in pro:
p_list.append(p)
c_list.append(data)
if isinstance(context, dict):
context["c_list"] = c_list #需要的菜單列表
context['p_list'] = p_list
else:
context = {
"c_list": c_list,
'p_list':p_list
}
return render(
request=request,
template_name=template_name,
context=context,
content_type=content_type,
status=status,
using=using
)
2.在views中引入,將render代替為render_template。