Django не переводит метки фильтров - PullRequest
0 голосов
/ 28 мая 2018

Я использую django-фильтры для фильтрации на моем сайте, и метки фильтров корректно переводятся на каждую страницу, кроме двух.Я проверил все распространенные проблемы, такие как проверка того, что il8n загружен на обе страницы, проверка пути к папке локали, перезапуск сервера, проверка промежуточного программного обеспечения и других настроек, проверка нечетких тегов в файле переводов и т. Д. Единственное сходство, которое я могуПодумайте о том, что они оба используют встроенный в Django Paginator, когда ни одна из других страниц сайта этого не делает.Будет ли этого достаточно, чтобы сломать перевод?Я включил код для одной из двух страниц в надежде, что кто-то может сказать мне, что происходит.Если кто-то хочет увидеть другие части кода, github здесь здесь

models_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"))

models_student.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])    

filters.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']

views.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))

1 Ответ

0 голосов
/ 05 июня 2018

Я решил эту проблему, но я собираюсь опубликовать ответ здесь на случай, если кто-то еще столкнется с этой же проблемой.

Я не выяснил корень проблемы (хотя я сейчасподозреваю, что это потому, что я определил пользовательские фильтры вместо того, чтобы позволить им автоматически генерироваться);однако лучшее решение, которое я нашел, состояло в том, чтобы определить метки для каждого фильтра отдельно в функции фильтра init , например:

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

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

Надеюсь, это кому-то поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...