Python 如何在Django中筛选类别
我有个小问题。我想创建一个网页目录之类的东西。在我的模型中,我创建了一个类Kategorie和一个类Firma。类Kategoria创建主类别和子类别。在Firma类中,我可以在witch category和subcategory中定义新记录的归属。我的问题是:如何在html中显示主页上的主要类别,并稍微降低子类别,如图所示 这是我的密码 型号.pyPython 如何在Django中筛选类别,python,django,Python,Django,我有个小问题。我想创建一个网页目录之类的东西。在我的模型中,我创建了一个类Kategorie和一个类Firma。类Kategoria创建主类别和子类别。在Firma类中,我可以在witch category和subcategory中定义新记录的归属。我的问题是:如何在html中显示主页上的主要类别,并稍微降低子类别,如图所示 这是我的密码 型号.py from django.db import models from django.contrib.auth.models import User
from django.db import models
from django.contrib.auth.models import User
class Kategoria(models.Model):
name = models.CharField(max_length=250, verbose_name='Kategoria')
slug = models.SlugField(unique=True,verbose_name='Adres SEO')
parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
class Meta:
unique_together = ('slug', 'parent',)
verbose_name = 'Kategoria'
verbose_name_plural = 'Kategorie'
def __str__(self):
full_path = [self.name]
k = self.parent
while k is not None:
full_path.append(k.name)
k = k.parent
return ' / '.join(full_path[::-1])
class Firma(models.Model):
user = models.ForeignKey(User, default=1, verbose_name='Użytkownik', on_delete=models.CASCADE)
title = models.CharField(max_length=250, verbose_name='Nazwa firmy')
slug = models.SlugField(unique=True, verbose_name='Adres SEO')
category = models.ForeignKey('Kategoria', null=True, blank=True, verbose_name='Kategoria', on_delete=models.CASCADE)
content = models.TextField(verbose_name='Opis')
draft = models.BooleanField(default=False, verbose_name='Szablon')
publish = models.DateField(auto_now=False, auto_now_add=False)
class Meta:
verbose_name='Firma'
verbose_name_plural='Firmy'
def __str__(self):
return self.title
from django.shortcuts import render, get_object_or_404
from .models import Kategoria, Firma
def widok_kategorii(request):
kategorie = Kategoria.objects.filter().order_by('name')
context = {'kategorie': kategorie}
return render(request, 'ogloszenia/index.html', context=context)
视图.py
from django.db import models
from django.contrib.auth.models import User
class Kategoria(models.Model):
name = models.CharField(max_length=250, verbose_name='Kategoria')
slug = models.SlugField(unique=True,verbose_name='Adres SEO')
parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
class Meta:
unique_together = ('slug', 'parent',)
verbose_name = 'Kategoria'
verbose_name_plural = 'Kategorie'
def __str__(self):
full_path = [self.name]
k = self.parent
while k is not None:
full_path.append(k.name)
k = k.parent
return ' / '.join(full_path[::-1])
class Firma(models.Model):
user = models.ForeignKey(User, default=1, verbose_name='Użytkownik', on_delete=models.CASCADE)
title = models.CharField(max_length=250, verbose_name='Nazwa firmy')
slug = models.SlugField(unique=True, verbose_name='Adres SEO')
category = models.ForeignKey('Kategoria', null=True, blank=True, verbose_name='Kategoria', on_delete=models.CASCADE)
content = models.TextField(verbose_name='Opis')
draft = models.BooleanField(default=False, verbose_name='Szablon')
publish = models.DateField(auto_now=False, auto_now_add=False)
class Meta:
verbose_name='Firma'
verbose_name_plural='Firmy'
def __str__(self):
return self.title
from django.shortcuts import render, get_object_or_404
from .models import Kategoria, Firma
def widok_kategorii(request):
kategorie = Kategoria.objects.filter().order_by('name')
context = {'kategorie': kategorie}
return render(request, 'ogloszenia/index.html', context=context)
index.html
{%include'ogloszenia/header.html%}
维特·凯特戈里
{kategorie%中的kategoria为%
{{kategoria.name}}
{%endfor%}
{%include'ogloszenia/footer.html%}
所以问题是子类别,对吗
您可以在模板中使用inclusion\u标记
,正如我在这里曾经提到的:
如果您需要呈现多个级别的子类别,那么只需按照我在链接中提到的操作即可
但是如果你只需要第一个级别,那么它非常简单:
视图。py:
{% include 'ogloszenia/header.html' %}
Wyświetl kategorie<br>
<ul>
{% for kategoria in kategorie %}
<li>
{{kategoria.name}}
{% if kategoria.children.count > 0 %}
<ul>
{% for sub in kategoria.children.all %}
<li>{{ sub.name }}</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% include 'ogloszenia/footer.html' %}
获取没有任何父级的类别(第2行)
模板:
{% include 'ogloszenia/header.html' %}
Wyświetl kategorie<br>
<ul>
{% for kategoria in kategorie %}
<li>
{{kategoria.name}}
{% if kategoria.children.count > 0 %}
<ul>
{% for sub in kategoria.children.all %}
<li>{{ sub.name }}</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
{% include 'ogloszenia/footer.html' %}
{%include'ogloszenia/header.html%}
维特·凯特戈里
{kategorie%中的kategoria为%
-
{{kategoria.name}
{%如果kategoria.children.count>0%}
{kategoria.children.all%中sub的%s}
- {{sub.name}}
{%endfor%}
{%endif%}
{%endfor%}
{%include'ogloszenia/footer.html%}
你可以把它设计成你发布的图片的样子,但这是实现这种设计的树形结构的方法