django интернационализирует календарь и использует односимвольное название дня - PullRequest
0 голосов
/ 28 июля 2011

У меня два вопроса, я недавно создал специальный шаблонный тег django, который отображает календарь при вызове. В настоящее время сталкиваюсь с двумя проблемами, которые не знаю, как решить,

  • Как отобразить названия дней в виде одного символа (S, M, T, ... и т. Д.) Я обнаружил calendar.day_abbr, который возвращает (SAT, MON..etc)
  • Мой сайт используется на нескольких языках, и мне было интересно, как мне заставить их отображаться в соответствии с языком просмотра. Я пытался использовать LocaleTextCalendar (), но безуспешно.

    из шаблона импорта django

    календарь импорта

    из настроек импорта django.conf

    register = template.Library ()

    def calendar_parser (парсер, токен): «»» Парсер календаря будет обрабатывать проверку параметров и передавать их в контекст «»» пытаться: tag_name, год, месяц, записи, as_, resol_tag = token.split_contents () кроме ValueError: поднять template.TemplateSyntaxError, «тегу% r требуется шесть аргументов»% token.contents.split () [0] вернуть календарный узел (год, месяц, записи, метка разрешения)

    class calendar_node (template.Node): «»» Обработать определенный узел в шаблоне. Потерпеть неудачу молча. "" "

    def __init__(self, year, month, entries, resolve_tag):
        try:
            self.year = template.Variable(year)
            self.month = template.Variable(month)
            self.entries = template.Variable(entries)
            #resolved strings
            self.resolve_tag = resolve_tag
        except ValueError:
            raise template.TemplateSyntaxError
    
    def render(self, context):
        try:
            # FIRST_DAY_OF_WEEK beginning of the week, django setting
            cal = calendar.LocaleTextCalendar(settings.FIRST_DAY_OF_WEEK, 'ar')
    
    
    
            # render calendar header
            context['week_header'] = [day for day in calendar.day_name]
    
    
    
            # Get the variables from the context so the method is thread-safe.
            my_entries = self.entries.resolve(context)
            my_year = self.year.resolve(context)
            my_month = self.month.resolve(context)
    
    
            month_days = cal.itermonthdays(my_year, my_month)
    
            lst = [[]]
            week = 0
    
            # make month lists containing list of days for each week
            # each day tuple will contain list of entries and 'current' indicator
            for day in month_days:
                entries = current = False   # are there entries for this day; current day?
                lst[week].append((day, my_entries, current))
                if len(lst[week]) == 7:
                    lst.append([])
                    week += 1
    
            # assign variable to context as resolve_tag
            context[self.resolve_tag] = lst
    
            return ''
    
    
        except ValueError:
            return
        except template.VariableDoesNotExist:
            raise template.TemplateSyntaxError
    

    Зарегистрируйте тег шаблона, чтобы он был доступен для шаблонов

    register.tag ("calendar_view", calendar_parser)

1 Ответ

1 голос
/ 28 июля 2011

calendar.weekheader(n)

Возвращает заголовок, содержащий сокращенные названия дней недели. n указывает ширину в символах для одного дня недели.

Таким образом, при n = 1 будут возвращаться односимвольные сокращения.

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