Просмотр исходного кода

Added date filter as per Django, e.g. {{ date_var1|date:"r" }}.

Fixed a rendering bug in examples/docroot/filters 
which was failing because it was still using the "plus" filter
which was renamed to "add" at some point.  Changed it to "add".
Colm Dougan 17 лет назад
Родитель
Сommit
e394033bd9

+ 5 - 2
examples/docroot/filters

@@ -1,3 +1,5 @@
+Add: 2 + 2 = {{ 2|add:2 }}
+
 Capfirst: {{ "capitalized"|capfirst }}
 
 Centered:
@@ -5,6 +7,9 @@ Centered:
 {{ "center"|center:20 }}
 </pre>
 
+Date format:  {{ date_var1|date:"r" }}
+DateTime format: {{ datetime_var1|date:"r" }}
+
 Escape JS: {{ "\" '"|escapejs }}
 
 First letter: {{ "first"|first }}
@@ -30,8 +35,6 @@ Line breaks: {{ "Line 1\nLine 2\nLine 3"|linebreaksbr }}
 
 Lowercase: {{ "LOWERCASE"|lower }}
 
-Plus: 2 + 2 = {{ 2|plus:2 }}
-
 Right adjust:
 <pre>
 {{ "right"|rjust:20 }}

+ 13 - 0
src/erlydtl/erlydtl_filters.erl

@@ -66,6 +66,19 @@ center(Input, Number) when is_binary(Input) ->
 center(Input, Number) when is_list(Input) ->
     string:centre(Input, Number).
 
+date([Input], FormatStr) when is_list(Input) or is_binary(Input) ->
+    date(Input, FormatStr);
+date(Input, FormatStr) when is_binary(Input) ->
+    list_to_binary(date(binary_to_list(Input), FormatStr));
+date([{{_,_,_} = Date,{_,_,_} = Time}], FormatStr) ->
+    erlydtl_dateformat:format({Date, Time}, FormatStr);
+date([{_,_,_} = Date], FormatStr) ->
+    erlydtl_dateformat:format(Date, FormatStr);
+date(Input, _FormatStr) when is_list(Input) ->
+    io:format("Unexpected date parameter : ~p~n", [Input]),
+    "".
+
+
 escapejs([Input]) when is_list(Input) or is_binary(Input) ->
     escapejs(Input);
 escapejs(Input) when is_binary(Input) ->

+ 5 - 1
src/tests/erlydtl_functional_tests.erl

@@ -57,7 +57,11 @@ setup("extends") ->
     {ok, CompileVars, ok, RenderVars};
 setup("filters") ->
     CompileVars = [],
-    RenderVars = [{'list', ["eins", "zwei", "drei"]}],
+    RenderVars = [
+        {date_var1, {1975,7,24}},
+        {datetime_var1, {{1975,7,24}, {7,13,1}}},
+        {'list', ["eins", "zwei", "drei"]}
+    ],
     {ok, CompileVars, ok, RenderVars};
 setup("for") ->
     CompileVars = [],

+ 8 - 0
src/tests/erlydtl_unittests.erl

@@ -193,6 +193,14 @@ tests() ->
                 {"|center:1",
                     <<"{{ var1|center:1 }}">>, [{var1, "KBR"}], 
                     <<"B">>},
+                {"|date 1",
+                   <<"{{ var1|date:\"r\" }}">>,
+                   [{var1, {1975,7,24}}],
+                   <<"Thu, 24 Jul 1975 00:00:00 +0000">>},
+                {"|date 2",
+                   <<"{{ var1|date:\"r\" }}">>,
+                   [{var1, {{1975,7,24}, {7,13,1}}}],
+                   <<"Thu, 24 Jul 1975 07:13:01 +0000">>},
                 {"|escapejs",
                     <<"{{ var1|escapejs }}">>, [{var1, "Skip's \"Old-Timey\" Diner"}], 
                     <<"Skip\\'s \\\"Old-Timey\\\" Diner">>},