我在 Django 项目中有 2 个应用程序,一个是 Saas,第二个是菜单。从 Saas 我可以将所有内容都保存到模板中,但从菜单中我无法在 html 导航栏中获取菜单项。我的项目树是
Html 模板中的代码
{% for item in Menu_list %}
<li class="nav-item dropdown dropdown__megamenu">
<a class="nav-link dropdown-opener" href="#">
{{ item.title }}
</a>
<div class="custom-dropdown-menu custom-megamenu">
<div class="content">
<ul class="megamenu">
<a href="#">menu</a>
</ul>
</div>
</div>
</li>
{% endfor %}
视图代码.Py
from django.shortcuts import render
from .models import Menu,MenuItem
def index(request):
Menu_list = Menu.objects.all()
MenuItem_list = MenuItem.objects.all()
return render(request, 'header-footer.html',{'Menu_list' : Menu_list,
'MenuItem_list': MenuItem_list,}
)
这是我在管理面板中的模型,一切正常,我无法添加菜单和子菜单项,只是无法从数据库中获取它。或者在 django 中,我可以在没有视图的情况下从数据库获取吗?
My models
from django.db import models
class Menu(models.Model):
name = models.CharField(
(u'Name'),
max_length=100
)
slug = models.SlugField(
(u'Slug')
)
base_url = models.CharField(
(u'Base URL'),
max_length=100,
blank=True,
null=True
)
description = models.TextField(
(u'Description'),
blank=True,
null=True
)
class Meta:
verbose_name = (u'menu')
verbose_name_plural = (u'menus')
def __unicode__(self):
return u"%s" % self.name
def __str__(self):
return self.__unicode__()
def save(self, *args, **kwargs):
"""
Re-order all items from 10 upwards, at intervals of 10.
This makes it easy to insert new items in the middle of
existing items without having to manually shuffle
them all around.
"""
super(Menu, self).save(*args, **kwargs)
current = 10
for item in MenuItem.objects.filter(menu=self).order_by('order'):
item.order = current
item.save()
current += 10
class MenuItem(models.Model):
menu = models.ForeignKey(
Menu,
verbose_name=(u'Name'),
on_delete=models.CASCADE,
)
order = models.IntegerField(
(u'Order'),
default=500
)
link_url = models.CharField(
(u'Link URL'),
max_length=100,
help_text=(u'URL or URI to the content, eg /about/ or http://test.com/')
)
title = models.CharField(
(u'Title'),
max_length=100
)
login_required = models.BooleanField(
(u'Login required'),
blank=True,
default=False,
help_text=(u'Should this item only be shown to authenticated users?')
)
anonymous_only = models.BooleanField(
(u'Anonymous only'),
blank=True,
default=False,
help_text=(u'Should this item only be shown to non-logged-in users?')
)
class Meta:
verbose_name = (u'menu item')
verbose_name_plural = (u'menu items')
def __unicode__(self):
return u"%s %s. %s" % (self.menu.slug, self.order, self.title)