如何在Django中显示数据库中的导航菜单?

如何在Django中显示数据库中的导航菜单?,django,django-models,django-forms,django-templates,django-views,Django,Django Models,Django Forms,Django Templates,Django Views,我的类别没有显示在标题菜单上,请告诉我此过程。 若我在home.html文件中使用代码,那个么所有类别都会显示在主页上,但当我点击任何类别页面时,它都不会显示 下面是models.py文件 class WebCategory(models.Model): name = models.CharField(max_length=50, unique=True, verbose_name='Category name') slug = models.SlugField(verbose_name

我的类别没有显示在标题菜单上,请告诉我此过程。 若我在home.html文件中使用代码,那个么所有类别都会显示在主页上,但当我点击任何类别页面时,它都不会显示

下面是models.py文件

class WebCategory(models.Model):
  name = models.CharField(max_length=50, unique=True, verbose_name='Category name')
  slug = models.SlugField(verbose_name='Slug')
  title = models.CharField(max_length=165, null=True)
  metadesc = models.TextField(max_length=165, null=True)
  created_at = models.DateTimeField(auto_now_add=True, null=True)
  updated_at = models.DateTimeField(auto_now=True)

  class Meta:
      verbose_name_plural = 'WebCategory'

  def save(self, *args, **kwargs):
      self.slug = slugify(self.name)
      super(WebCategory, self).save(*args, **kwargs)

  def __str__(self):
      return self.name

class WebSubCategory(models.Model):
  category = models.ForeignKey('WebCategory', related_name='websubcategory', on_delete=models.CASCADE, blank=True,
                             null=True, verbose_name='Select category')
  name = models.CharField(max_length=50)
  slug = models.SlugField(unique=True, null=True)
  title = models.CharField(max_length=100, null=True)
  metadesc = models.TextField(max_length=165, null=True)
  description = RichTextField(blank=True, null=True)
  created_at = models.DateTimeField(auto_now_add=True, null=True)
  updated_at = models.DateTimeField(auto_now=True)

  class Meta:
      verbose_name_plural = 'WebSubCategory'

  def __str__(self):
      return self.name

class SubChildCategory(models.Model):
  subcat=models.ForeignKey('WebSubCategory', related_name='subchild', on_delete=models.CASCADE, blank=True, null=True, verbose_name='Select Subcategory')
  name=models.CharField(max_length=50)
  slug=models.SlugField(unique=True, null=True)
  title=models.CharField(max_length=100, null=True)
  metadesc=models.TextField(max_length=165, null=True)
  description=RichTextField(blank=True, null=True)
  created_at=models.DateTimeField(auto_now_add=True, null=True)
  updated_at=models.DateTimeField(auto_now=True)

  class Meta:
      verbose_name_plural="SubChildCategory"

  def __str__(self):
      return self.name
这是我的views.py文件

def header(request):
   category_list = WebCategory.objects.order_by('-created_at')[:5]
   context_dict={'webcat':category_list,}
   return render(request, 'layouts/header.html', context_dict)
下面是y URL.py文件

from django.urls import path, re_path
from . import views
from django.conf.urls.static import static
from django.conf import settings
from django.conf.urls import url, include

urlpatterns = [
   re_path(r"^$", views.home, name="home"),
   re_path(r"blog/$", views.blog, name="blog"),
   url(r"^(?P<pk>\d+)/$", views.show_blog, name="show_blog"),
   path('<slug>/', views.show_page, name="show_page"),
   ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
从django.url导入路径,重新设置路径
从…起导入视图
从django.conf.url.static导入静态
从django.conf导入设置
从django.conf.url导入url,包括
URL模式=[
re_path(r“^$”,views.home,name=“home”),
回复路径(r“blog/$”,views.blog,name=“blog”),
url(r“^(?P\d+/$”,views.show_blog,name=“show_blog”),
路径('/',views.show_page,name=“show_page”),
]+静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
下面是我的header.html文件

    <nav class="collapse">
                <ul class="nav nav-pills" id="mainNav">
                         {%if webcat %}
                         {% for category in webcat %}
                                                <li class="dropdown dropdown-mega">
                                                    <a class="dropdown-item dropdown-toggle" href="JavaScript:void()">
                                                        {{category}}
                                                    </a>
                                                    <ul class="dropdown-menu">
                                                        {% if category.websubcategory.all %}
                                                        <li>
                                                            <div class="dropdown-mega-content">
                                                                <div class="row">
                                                                    {% for subcategory in category.websubcategory.all|slice:":5" %}
                                                                    <div class="col-lg-3">
                                                                        <span class="dropdown-mega-sub-title">{{subcategory.name}}</span>
                                                                        {% for subchildcat in subcategory.subchild.all %}
                                                                        <ul class="dropdown-mega-sub-nav">
                                                                            <li><a class="dropdown-item" href="{% url 'show_page' subcategory.slug %}">{{subchildcat}}</a></li>
                                                                        </ul>
                                                                        {% endfor %}
                                                                    </div>
                                                        {% endfor %}
                                                                </div>
                                                            </div>
                                                        </li>
                                                        {% else %}
                                                        <p>No category Found</p>
                                                        {% endif %}
                                                    </ul>
                                                </li>
                        {% endfor %}
                        {% else %}
                        <p>No Category Found</p>
                        {% endif %}
                </ul>
              </nav>

    {%if网络广播%} {webcat%中类别的%s}
    • {%if category.websubcategory.all%}
    • {%用于category.websubcategory.all中的子类别::5“%} {{subcategory.name} {subcategory.subchild.all%}
      {%endfor%} {%endfor%}
    • {%else%} 找不到类别

      {%endif%}
  • {%endfor%} {%else%} 找不到类别

    {%endif%}

除非您从主页发出ajax请求,否则不能使用单独的视图获取页面的一部分。我的意思是,你的
标题
视图调用过哪里

所以你有两个选择:

  • 将上下文处理器添加到
    模板
    设置中,该设置将为每个视图将类别添加到上下文中。通过这种方式,您可以访问基本模板(用于扩展所有其他模板的模板)中的
    categories
    变量。检查以了解如何编写自己的上下文处理器

    def category_list(request):
        category_list = WebCategory.objects.order_by('-created_at')[:5]
        return {'webcat': category_list}
    
    将这个小上下文处理器添加到模板处理中会将
    webcat
    上下文变量添加到每个渲染的模板中

  • 使用javascript(AJAX)从页面本身动态获取类别列表。这意味着您将javascript添加到基本模板中,以获取类别的JSON列表并更新菜单。如果您从未使用过javascript,那么应该学习一点jQuery,特别是搜索“如何使用django发出ajax请求”