如何在Django中显示数据库中的导航菜单?
我的类别没有显示在标题菜单上,请告诉我此过程。 若我在home.html文件中使用代码,那个么所有类别都会显示在主页上,但当我点击任何类别页面时,它都不会显示 下面是models.py文件如何在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
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请求”