我試圖在基于文章標題的字母標題下列出“文章”查詢的結果,例如:
一個
- 蘋果
- 食蟻獸
乙
- 蜜蜂
- 蝙蝠
等等
我知道我可以使用視圖中的查詢集和過濾器手動執行此操作,但是否有更 Pythonic 的方法呢?我最初的想法是模板中的一對 for 回圈,一個帶有字母表,另一個帶有文章,類似于 {% if article.startwith({{ letter}}) %} 但我不認為那是包含在 Django 模板語言中。
模型:
class Article(models.Model):
title = models.CharField(max_length=200)
tagline = models.CharField(max_length=75, blank=False, default='Required')
author = models.ForeignKey(
get_user_model(),
on_delete=models.SET_NULL,
null = True
)
created = models.DateTimeField(auto_now_add=True)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True, blank=True)
tags = TaggableManager()
banner_image = models.ImageField(upload_to='wiki_images/banners', null=True, blank=True)
body = models.TextField()
我也考慮過 Django regroup 標簽,但很難理解如何將每個文章標題的第一個字母傳遞給它。
在這個專案上運行 Django 3.1。編輯:錯別字
uj5u.com熱心網友回復:
使用重組是個好主意!
但是為了有一些東西可以分組,我們還需要用第一個字母來注釋我們的查詢集,以便有一些東西可以分組。
試試這個:
from django.db.models.functions import Substr, Upper
articles = Article.objects.annotate(first_letter=Upper(Substr('title', 1, 1)))
然后在模板中
{% regroup articles by first_letter as first_letter_articles %}
{% for first_letter in first_letter_articles %}
<li>{{ first_letter.grouper }}
<ul>
{% for article in first_letter.list %}
<li>{{ article.title }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/378547.html
標籤:姜戈 django-views
