Limit number of characters with Django Template filter
Question:
I am trying to output the first 255 characters of a description on a list of items and am looking for a method to get that.
Example: I have a variable that contains 300 or so characters.
I call that variable like this, {{ my_variable|characterlimit:255 }}
and it would return only the first 255 characters of that variable.
If this tag doesn’t exist, I will simply create it (and suggest that it goes into django), but I wanted to make sure it didn’t before I took the time to do that. Thanks!
Answers:
It doesn’t exist unfortunately. There are moves to implement it, but it’s still in the design stage (well, implemented, but waiting for design decision), as described here.
Patch attached to that ticket contains implementation.
If the “my_variable” is a string, you can take advantage of the slice filter, which treats the string as a list of characters. If it’s a set of words, the rough equivilant is truncatewords – but that doesn’t quite sound like your need.
truncatewords
also adds an ellipsis ...
at the end of the truncated result.
Usage would be something like
{{ my_variable|slice:":255" }}
If do you want to truncate by word, take a look at this
https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#truncatechars
A more simple way by using the standard template tag is:
{{ variable|stringformat:".10s" }}
In this case the 10 is the position argument and for a string it is the maximum number of characters to be displayed.
There is an official built-in filter:
{{ variable|truncatechars:255 }}
Using a templatefilter for truncating your text isn’t really suitable for a responsive design. Therefore you could also use css to truncate your text that is responsive. I know the OP asked to do this with a django templatefilter.
You can achieve a responsive truncated text using this:
.class {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
I am trying to output the first 255 characters of a description on a list of items and am looking for a method to get that.
Example: I have a variable that contains 300 or so characters.
I call that variable like this, {{ my_variable|characterlimit:255 }}
and it would return only the first 255 characters of that variable.
If this tag doesn’t exist, I will simply create it (and suggest that it goes into django), but I wanted to make sure it didn’t before I took the time to do that. Thanks!
It doesn’t exist unfortunately. There are moves to implement it, but it’s still in the design stage (well, implemented, but waiting for design decision), as described here.
Patch attached to that ticket contains implementation.
If the “my_variable” is a string, you can take advantage of the slice filter, which treats the string as a list of characters. If it’s a set of words, the rough equivilant is truncatewords – but that doesn’t quite sound like your need.
truncatewords
also adds an ellipsis ...
at the end of the truncated result.
Usage would be something like
{{ my_variable|slice:":255" }}
If do you want to truncate by word, take a look at this
https://docs.djangoproject.com/en/1.4/ref/templates/builtins/#truncatechars
A more simple way by using the standard template tag is:
{{ variable|stringformat:".10s" }}
In this case the 10 is the position argument and for a string it is the maximum number of characters to be displayed.
There is an official built-in filter:
{{ variable|truncatechars:255 }}
Using a templatefilter for truncating your text isn’t really suitable for a responsive design. Therefore you could also use css to truncate your text that is responsive. I know the OP asked to do this with a django templatefilter.
You can achieve a responsive truncated text using this:
.class {
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}