代码之家  ›  专栏  ›  技术社区  ›  sebpiq

Django日期过滤器:为什么使用的格式与datetime库中的格式不同?

  •  1
  • sebpiq  · 技术社区  · 14 年前

    用于格式化日期 日期

    {{ my_date|date:"Y-m-d" }}
    

    如果你使用 strftime公司 日期时间 ,则必须使用以下命令:

    my_date.strftime("%Y-%m-%d")
    

    % 它也用于标记,因此是转义的还是什么?

    但这不是主要问题。。。我想用同样的 DATE_FORMAT 参数化 settings.py % 在日期格式化为 {{ my_date|date|dream_filter }} 因为如果我用 DATE_FORMAT = "%Y-%m-%d" %2001-%6-%12

    4 回复  |  直到 14 年前
        1
  •  1
  •   Jack M.    14 年前

    虽然这可能不是“正确”的答案,但我通过在设置中添加另一个变量并在所有地方使用它来解决这个问题。我有JavaScript格式的日期, datetime ,和Django模板,所以我添加了这三个模板。

    TIME_ZONE = 'America/Phoenix'  
    DATETIME_FORMAT = 'm-d-Y H:m:s T'
    DATE_FORMAT = _('m-d-Y')       
    JS_DATE_FORMAT = _('mm-dd-yy')
    PERC_DATE_FORMAT = _('%m-%d-%Y')
    

        2
  •  3
  •   sshwsfc    12 年前

    from django.conf import settings
    py_format = settings.DATE_INPUT_FORMATS[0]
    
        3
  •  0
  •   Densefog    14 年前

    不是你主要问题的一部分,但无论如何可能很方便。我发现文档中提到日期过滤器格式是基于php的 date format .

        4
  •  0
  •   ibustama    11 年前

    您可以尝试编写自定义筛选器:

    #app/templatetags/python_date.py
    from datetime import date, datetime
    
    from django import template
    
    register = template.Library()
    
    @register.filter(name='pythondate')
    def python_date_filter(value, arg):
        if not type(value) == date and not type(value) == datetime:
            raise Exception('Value passed in to the filter must be a date or a datetime.')
    
        return value.strftime(str(arg))
    

    模板中的用法:

    {% load python_date %}
    
    {{ some_date|pythondate:'%Y-%m-%d' }}