@@ -24,6 +24,7 @@ All additional filters/tags will be registered automatically.
 | 
			
		||||
     - **[filesizeformat](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#filesizeformat)** (human-readable filesize; takes bytes as input)
 | 
			
		||||
     - **[slugify](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#slugify)** (creates a slug for a given input)
 | 
			
		||||
     - **truncatesentences** / **truncatesentences_html** (returns the first X sentences [like truncatechars/truncatewords]; please provide X as a parameter)
 | 
			
		||||
     - **random** (returns a random element of the input slice)
 | 
			
		||||
 | 
			
		||||
  - Markup
 | 
			
		||||
     - **markdown**
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										22
									
								
								filters.go
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								filters.go
									
									
									
									
									
								
							@@ -3,6 +3,7 @@ package pongo2addons
 | 
			
		||||
import (
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"regexp"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"time"
 | 
			
		||||
@@ -17,11 +18,14 @@ import (
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	rand.Seed(time.Now().UTC().UnixNano())
 | 
			
		||||
 | 
			
		||||
	// Regulars
 | 
			
		||||
	pongo2.RegisterFilter("slugify", filterSlugify)
 | 
			
		||||
	pongo2.RegisterFilter("filesizeformat", filterFilesizeformat)
 | 
			
		||||
	pongo2.RegisterFilter("truncatesentences", filterTruncatesentences)
 | 
			
		||||
	pongo2.RegisterFilter("truncatesentences_html", filterTruncatesentencesHTML)
 | 
			
		||||
	pongo2.RegisterFilter("random", filterRandom)
 | 
			
		||||
 | 
			
		||||
	// Markup
 | 
			
		||||
	pongo2.RegisterFilter("markdown", filterMarkdown)
 | 
			
		||||
@@ -218,6 +222,24 @@ func filterTruncatesentencesHTML(in *pongo2.Value, param *pongo2.Value) (*pongo2
 | 
			
		||||
	return pongo2.AsSafeValue(newOutput.String()), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func filterRandom(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
 | 
			
		||||
	if !in.CanSlice() {
 | 
			
		||||
		return nil, &pongo2.Error{
 | 
			
		||||
			Sender:    "filter:random",
 | 
			
		||||
			OrigError: errors.New("input is not sliceable"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if in.Len() <= 0 {
 | 
			
		||||
		return nil, &pongo2.Error{
 | 
			
		||||
			Sender:    "filter:random",
 | 
			
		||||
			OrigError: errors.New("input slice is empty"),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return in.Index(rand.Intn(in.Len())), nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func filterTimeuntilTimesince(in *pongo2.Value, param *pongo2.Value) (*pongo2.Value, *pongo2.Error) {
 | 
			
		||||
	basetime, isTime := in.Interface().(time.Time)
 | 
			
		||||
	if !isTime {
 | 
			
		||||
 
 | 
			
		||||
@@ -89,4 +89,10 @@ func (s *TestSuite1) TestFilters(c *C) {
 | 
			
		||||
	c.Assert(getResult("{{ text|truncatesentences_html:3 }}", pongo2.Context{
 | 
			
		||||
		"text": `<div class="test"><ul><li>This is a first sentence with a 4.50 number.</li><li>The second one is even more fun! Isn't it?</li><li>Last sentence, okay.</li></ul></div>`}),
 | 
			
		||||
		Equals, `<div class="test"><ul><li>This is a first sentence with a 4.50 number.</li><li>The second one is even more fun! Isn't it?</li></ul></div>`)
 | 
			
		||||
 | 
			
		||||
	// Random
 | 
			
		||||
	c.Assert(getResult("{{ array|random }}",
 | 
			
		||||
		pongo2.Context{"array": []int{42}}),
 | 
			
		||||
		Equals, "42")
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user