我使用django过滤器在我的网站上进行过滤,过滤器标签在每一页上都被正确翻译,除了两页。我检查了所有常见的问题,如确保il8n加载到两个页面、测试locale文件夹的路径、重新启动服务器、检查中间件和其他设置、检查翻译文件中的模糊标记等。我能想到的唯一相似之处是,它们都使用Django的内置Paginator,而没有在网站上的其他网页做。这足以破坏翻译吗?我把其中一页的代码包括进来,希望有人能告诉我发生了什么。如果有人想看到其他代码片段,github就是here
型号_FSJUser.py公司
class FSJUser(models.Model):
# List the languages a user may choose from in human readable format and also make them accessible in other files
# via FSJUser.LANG_CHOICES, FSJUser.ENGLISH, etc.
FRENCH = 'fr'
ENGLISH = 'en'
LANG_CHOICES = (
(FRENCH, "Fran"+u"\u00E7"+"ais"),
(ENGLISH, 'English'),
)
# Link FSJUser with a User model for authentication related business
user = models.OneToOneField(User, on_delete = models.CASCADE, blank = True, null = True)
# All FSJ Users have these attributes in common
ccid = models.CharField(max_length = 255, unique = True, verbose_name = _("CCID"))
first_name = models.CharField(max_length = 255, verbose_name = _("First Name"))
last_name = models.CharField(max_length = 255, verbose_name = _("Last Name"))
email = models.EmailField(max_length = 254, verbose_name= _("Email"))
lang_pref = models.CharField(max_length = 2, blank = False, choices = LANG_CHOICES, default = FRENCH, verbose_name = _("Language Preference"))
型号_学生.py
# This class inherits from a standard FSJ User and extends for Student specific attributes and methods
class Student(FSJUser):
program = models.ForeignKey(Program, on_delete = models.SET_NULL, null = True, blank = True, verbose_name = _("Program"))
year = models.ForeignKey(YearOfStudy, on_delete=models.PROTECT, verbose_name = _("Year"))
gpa = models.CharField(max_length = 10, null = True, blank = True, verbose_name = _("GPA"))
middle_name = models.CharField(max_length = 50, blank = True, verbose_name = _("Middle Name"))
student_id = models.CharField(max_length = 10, unique = True, verbose_name = _("U of A Student ID"), validators=[validate_student_id])
过滤器.py
from .models import *
import django_filters
from django.forms import CheckboxSelectMultiple, DateInput
from django.utils.translation import gettext_lazy as _
LOOKUP_TYPES = [
('icontains', _("contains"))
]
class StudentFilter(django_filters.FilterSet):
ccid = django_filters.CharFilter(lookup_expr='icontains')
first_name = django_filters.CharFilter(lookup_expr='icontains')
middle_name = django_filters.CharFilter(lookup_expr='icontains')
last_name = django_filters.CharFilter(lookup_expr='icontains')
student_id = django_filters.CharFilter(lookup_expr='icontains')
class Meta:
model = Student
fields = ['ccid','first_name','middle_name','last_name','student_id','year','program']
视图.py
def coordinator_students(request):
FSJ_user = get_FSJ_user(request.user.username)
student_list = Student.objects.all().order_by('ccid')
filtered_list = StudentFilter(request.GET, queryset=student_list)
student_paginator = Paginator(filtered_list.qs, 25)
template = loader.get_template("FSJ/coord_student_list.html")
context = get_standard_context(FSJ_user)
context["student_list"] = student_list
page = request.GET.get('page', 1)
try:
students = student_paginator.page(page)
except PageNotAnInteger:
students = student_paginator.page(1)
except EmptyPage:
students = student_paginator.page(student_paginator.num_pages)
context["filter"] = filtered_list
context["students"] = students
return HttpResponse(template.render(context, request))
我已经解决了这个问题,但我会把答案贴在这里,以防其他人遇到同样的问题。你知道吗
我没有找出问题的根源(尽管我现在怀疑这是因为我定义了自定义过滤器,而不是让它们自动生成);但是我发现最有效的解决方案是在过滤器的init函数中分别定义每个过滤器的标签,如下所示:
希望这对别人有帮助。你知道吗
相关问题 更多 >
编程相关推荐