【问题标题】:django internationalizing a calendar and using single character day namedjango 国际化日历并使用单字符日期名称
【发布时间】:2011-10-15 06:17:00
【问题描述】:

我有两个问题,我最近构建了一个 django 自定义模板标签,它在调用时会显示一个日历。我目前面临两个不知道如何解决的问题,

  • 如何将日期名称显示为单个字符(S、M、T、..etc)我找到了返回(SAT、MON..etc)的 calendar.day_abbr
  • 我的网站正在使用多种语言,我想知道如何让它们按照查看语言显示。我尝试使用 LocaleTextCalendar() 但没有任何运气。

    从 django 导入模板

    导入日历

    从 django.conf 导入设置

    register = template.Library()

    def calendar_parser(解析器,令牌): """ 日历解析器将处理验证参数并将它们传递给上下文 """ 尝试: tag_name、年、月、条目、as_、resolve_tag = token.split_contents() 除了ValueError: 引发 template.TemplateSyntaxError,“%r 标签需要六个参数”% token.contents.split()[0] return calendar_node(year, month, entries, resolve_tag)

    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)

【问题讨论】:

  • 编辑问题以修正格式。很难阅读。
  • 我试过了,但它不起作用......
  • 帮助在编辑页面的右侧。很详细。

标签: python django


【解决方案1】:

calendar.weekheader(n)

返回包含缩写工作日名称的标题。 n 指定一个工作日的字符宽度。

因此对于 n=1 将返回单个字符的缩写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多