【发布时间】:2018-01-20 09:23:50
【问题描述】:
我对注释有一点问题。我想在主 html 文件中显示我的班级类别中的记录。我使用 annotate 方法从 db 获取查询。我在第二类 Firmy 中使用 ForeignKey 来分类类别。现在我不知道如何显示例如在“企业”类别中添加了多少个网站在“Firmy”类中。现在我有类似的东西:“业务(2)(3)(4)”,当我使用按id计数的注释时。这是我的 models.py
from django.db import models
from django.utils import timezone
class Kategorie(models.Model):
glowna = models.CharField(max_length=150, verbose_name='Kategoria')
class Meta:
verbose_name='Kategoria'
verbose_name_plural='Kategorie'
def __str__(self):
return self.glowna
class Witryna(models.Model):
nazwa = models.CharField(default="", max_length=150, verbose_name = 'Nazwa strony')
adres_www = models.CharField(max_length=70, verbose_name='Adres www')
slug = models.SlugField(max_length=250, verbose_name='Przyjazny adres url')
email = models.CharField(max_length=100, verbose_name='Adres e-mail')
text = models.TextField(max_length=3000, verbose_name='Opis strony')
kategoria = models.ForeignKey(Kategorie, verbose_name='Kategoria')
data_publikacji = models.DateTimeField(blank=True, null=True, verbose_name='Data publikacji')
class Meta:
verbose_name='Strona www'
verbose_name_plural = 'Strony www'
def publikacja(self):
self.data_publikacji=timezone.now()
self.save()
def __str__(self):
return self.nazwa
还有一部分来自 views.py
from django.db.models import Count
wpisy_kat = Kategorie.objects.annotate(cnt_witryna=Count('Witryna'))
那么我必须使用什么样的方法或标签来显示例如:
Business(34)
Industry(21)
Health Care(11)
其中名称 od category 是类别类别中的字段,整数是查询到数据库的结果,例如业务类别中有多少网站?
我的 html 文件是:
{% for kategoria in kategorie %}
<table>
<tr>
<td>
<li><a href="{% url 'detale_kat' slug_kat=kategoria.slug_kat %}">{{ kategoria.glowna|linebreaksbr }} </a></li>
{% for wpis in wpisy_kat %}
{{ wpis }} ({{ cat.cnt_witryna }})
{% endfor %}
</td>
</tr>
</table>
{% endfor %}
和主 html 文件:
{% include 'firmy/header.html' %}
<html>
<body>
<p>
<center>
<ul id="menu">
<li><a href="link1.html">Strona główna</a></li>
<li><a href="link2.html">Jak dodać stronę</a></li>
<li><a href="link3.html">Regulamin</a></li>
<li><a href="link4.html">Kontakt</a></li>
</ul>
</center>
<div class="glowna">
<div class="lewe_menu">
<h3><center>Ostatnio dodane</center></h3>
{%include 'firmy/widok_strony.html'%}
</div>
<div class="srodek">
<h3><center>Kategorie</center></h3>
<center>{%include 'firmy/widok_kategorii.html'%} </center>
</div>
<div class="prawe_menu">
<h3><center>Reklama</center></h3>
<center>Tutaj wpisz kod reklamy </center>
</div>
{% include 'firmy/footer.html' %}
</div>
</body>
</html>
view.py 文件
from django.shortcuts import render, get_object_or_404
from .models import Witryna, Kategorie
from django.utils import timezone
from django.db.models import Count
def widok_strony(request):
firmy = Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
return render(request, 'firmy/widok_strony.html', {'firmy': firmy})
def widok_kategorii(request):
kategorie = Kategorie.objects.all()
wpisy_kat = Witryna.objects.annotate(cnt_kategoria=Count('kategoria'))
return render(request, 'firmy/widok_kategorii.html', {'kategorie': kategorie, 'wpisy_kat': wpisy_kat,})
def index(request):
firmy = Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
kategorie = Kategorie.objects.order_by('glowna')
wpisy_kat = Witryna.objects.annotate(cnt_witryna=Count('kategoria'))
return render(request, 'firmy/index.html', {'kategorie': kategorie, 'wpisy_kat': wpisy_kat, 'firmy': firmy})
def detale_strony(request, slug):
det_wpisu = get_object_or_404(Witryna, slug=slug)
firmy = Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
return render(request, 'firmy/detale_strony.html', {'det_wpisu': det_wpisu, 'firmy': firmy})
def detale_kat(request, slug_kat):
det_kategorii = get_object_or_404(Kategorie, slug_kat=slug_kat)
firmy = Witryna.objects.filter(data_publikacji__lte=timezone.now()).order_by('data_publikacji')
return render(request, 'firmy/detale_kat.html', {'det_kategorii': det_kategorii, 'firmy': firmy})
【问题讨论】:
-
请用您正在使用的html模板更新您的问题(您可以删除屏幕截图,在这种情况下没有帮助)
-
html 文件已附加
-
小心,在
{{ wpis }} ({{ cat.cnt_witryna }})中:将cat替换为wpis,然后您将混合两个for 循环,annotate 方法已经为您提供了类别列表,您应该只尝试使用我的检查,然后添加<a>标签和wpis.slug_kat(无需使用表格) -
是的,我在 {{wpis.cnt.witryna}} 上进行了更改,结果例如:Aktualności i media (1)(1)(1)。当我进入每个类别的类别时,我不仅有相同的页面,例如:网站类别中的 google.com。
-
请添加呈现此 html 的视图代码,我不明白为什么它列出网站而不是类别