gpt4 book ai didi

python - django中的注释方法

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:04 25 4
gpt4 key购买 nike

我在注释方面遇到了一些问题。我想在主 html 文件中显示我的类(class)类别中的记录。我使用注释方法从数据库中获取查询。我在第二节课中使用Firmy的ForeignKey来类Kategorie。现在我不知道如何显示例如在“Firmy”类中添加的网站有多少个在“商业”类别中。现在,当我使用按 id 进行计数的注释时,我得到的结果类似于:“Business (2)(3)(4)”。这是我的 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 类别是类别类别中的字段,整数是查询数据库的结果,例如有多少个网站属于商业类别?

我的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})

最佳答案

您的 View 需要返回类似以下内容:

wpisy_kat = Kategorie.objects.annotate(cnt_witryna=Count('witryna'))
return render(request, 'app/template.html', {'wpisy_kat': wpisy_kat})

template.html:

<ul>
{% for cat in wpisy_kat %}

<li>{{ cat }} ({{ cat.cnt_witryna }})</li>

{% endfor %}
</ul>

编辑:

您可以向注释查询添加排序或过滤,无需从 View 传递 2 个参数,也无需执行 for/loops :

替换 View 中的查询:

wpisy_kat = Kategorie.objects.annotate(cnt_witryna=Count('witryna')).order_by('glowna')

然后在 HTML 中:

<ul>
{% for cat in wpisy_kat %}

<li><a href="{% url 'detale_kat' slug_kat=cat.slug_kat %}">{{ cat }} ({{ cat.cnt_witryna }}) </a></li>

{% endfor %}
</ul>

关于python - django中的注释方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45642318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com