我正在尝试在我的 Django 项目中实现面包屑。为了实现这一点,我创建了一个由我拥有的每个视图继承的 mixin。这是代码:
class BreadcrumbMixin(object):
index = False
url_name = None
verbose_name = None
def breadcrumbUpdate(self, breadcrumb, new_value):
for i in range(len(breadcrumb)):
if breadcrumb[i]['url_name'] == new_value['url_name']:
breadcrumb = breadcrumb[:i + 1]
breadcrumb.append(new_value)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
new_value = {
'url_name' : self.url_name,
'verbose_name' : self.verbose_name,
'url' : reverse_lazy(self.url_name, **kwargs)
}
if self.index:
self.request.session['breadcrumb'] = [new_value,]
else:
self.breadcrumbUpdate(self.request.session['breadcrumb'], new_value)
return context
Run Code Online (Sandbox Code Playgroud)
属性index,url_name和verbose_name在继承它的每个视图中设置。例如:
class Index(BreadcrumbMixin, TemplateView):
template_name = 'crud/index.html'
index = True
url_name …Run Code Online (Sandbox Code Playgroud)