Мой сайт используется на нескольких языках, и мне было интересно, как мне заставить их отображаться в соответствии с языком просмотра. Я пытался использовать 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)