Django无法获取单词集合且需实现按字母顺序展示词库的问题求助
Django无法获取单词集合且需实现按字母顺序展示词库的问题求助
嘿,我来帮你搞定这个词典展示的问题~你的需求很清晰:用和记忆游戏同一份数据库,做一个按字母排序的“单词:翻译”词典,咱们一步步来调整现有代码:
首先看你现有代码的小问题:
- 目前的查询语句没有做排序,所以单词是按数据库存储顺序展示的,不是字母序
- 模板里的单词和翻译各占一行,看起来不像词典的样式
第一步:修改视图层代码,实现按字母排序
你只需要在views.py里给查询结果加上排序规则就行。如果要严格按字母大小写排序(比如大写A开头的单词排在小写a前面),直接用order_by('question');如果想忽略大小写排序(让Apple和apple排在一起),就用Django的Lower函数处理字段:
from django.shortcuts import render from cards.models import Card # 忽略大小写排序需要导入这个函数 from django.db.models.functions import Lower def lexicon(request): # 方案1:大小写敏感的字母排序 card_list = Card.objects.order_by('question') # 方案2:忽略大小写的字母排序(推荐,更符合词典习惯) # card_list = Card.objects.order_by(Lower('question')) context = {'card_list': card_list} return render(request, 'lexicon/lexicon.html', context)
第二步:调整模板,改成“单词:翻译”的词典样式
把模板里分开的两个<p>标签合并成一行,同时加上空数据的提示,避免数据库没数据时页面空落落的:
<main> <div class="container-small"> {% for card in card_list %} <p>{{ card.question }}: {{ card.answer }}</p> {% empty %} <p>暂时还没有添加任何单词哦~</p> {% endfor %} </div> </main>
额外排查:如果还是无法获取单词集合
要是改完之后还是看不到内容,你可以检查这几点:
- 确认
urls.py里已经正确配置了lexicon的路由,比如:from django.urls import path from . import views urlpatterns = [ # 其他路由... path('lexicon/', views.lexicon, name='lexicon'), ] - 检查数据库里有没有实际数据,毕竟空数据库的话循环不会输出内容
- 确认
cards/models.py里的Card模型字段和数据库一致,比如question和answer字段都正确定义了
这样调整后,就能得到一个按字母顺序排列、样式规整的词库页面啦~
备注:内容来源于stack exchange,提问作者Sorin Vintzeanu Vintze
相关产品推荐
相关产品推荐

