Django不翻译过滤器标签

2024-10-03 21:36:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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))

Tags: djangonametrueverbosemodelslengthstudentfilters
1条回答
网友
1楼 · 发布于 2024-10-03 21:36:16

我已经解决了这个问题,但我会把答案贴在这里,以防其他人遇到同样的问题。你知道吗

我没有找出问题的根源(尽管我现在怀疑这是因为我定义了自定义过滤器,而不是让它们自动生成);但是我发现最有效的解决方案是在过滤器的init函数中分别定义每个过滤器的标签,如下所示:

    def __init__(self, *args, **kwargs):
        super(StudentFilter, self).__init__(*args, **kwargs)

        # Adding custom translatable labels to autogenerated filters
        self.filters['year'].label = _("Year:")

希望这对别人有帮助。你知道吗

相关问题 更多 >