多语言Wagtail CMS:如何在首页展示3条最新单语言文章
筛选特定语言的最新3篇文章解决方案
核心思路
要实现只展示某一种语言的最新3篇文章,关键是在查询时添加语言过滤条件,结合原有的排序和切片逻辑即可。
前提条件
确保你的Insight模型中存在用于标识语言的字段,示例定义如下:
from django.db import models # 定义支持的语言选项 LANGUAGE_CHOICES = ( ('en', 'English'), ('zh-cn', '简体中文'), # 可添加更多语言... ) class Insight(models.Model): title = models.CharField(max_length=200) content = models.TextField() date = models.DateTimeField(auto_now_add=True) language = models.CharField(max_length=10, choices=LANGUAGE_CHOICES) # 其他业务字段...
具体实现
情况1:根据用户当前语言自动展示
如果要匹配用户访问时的语言设置(基于Django国际化配置),可借助get_language()获取当前语言代码:
from django.utils.translation import get_language def get_context(self, request): context = super().get_context(request) # 获取当前请求对应的语言代码 current_language = get_language() # 筛选对应语言的文章,按日期倒序取最新3篇 latest_insights = Insight.objects.filter(language=current_language).order_by('-date')[:3] context['latest_insights'] = latest_insights return context
情况2:固定展示某一种语言
如果不需要根据用户语言切换,只想固定展示某一种语言的文章,直接指定语言值即可:
def get_context(self, request): context = super().get_context(request) # 固定筛选简体中文的文章,可替换为你需要的语言标识 latest_insights = Insight.objects.filter(language='zh-cn').order_by('-date')[:3] context['latest_insights'] = latest_insights return context
可选优化:无对应语言时的降级处理
如果担心当前语言没有文章,可添加降级逻辑,比如默认取英文文章:
from django.utils.translation import get_language def get_context(self, request): context = super().get_context(request) current_language = get_language() # 先尝试获取当前语言的文章 latest_insights = Insight.objects.filter(language=current_language).order_by('-date')[:3] # 如果当前语言无文章,取默认语言(英文)的文章 if not latest_insights.exists(): latest_insights = Insight.objects.filter(language='en').order_by('-date')[:3] context['latest_insights'] = latest_insights return context
内容的提问来源于stack exchange,提问作者Taneef
相关产品推荐
相关产品推荐

