Configuration¶
Each of the following strings are valid as a dict key
of the VIMAGE
dict value
.
Confused? Take a look at a definition example of VIMAGE
.
Note
The developer may provide a custom error which will be automatically HTML escaped.
The string may also be translated.
In order to do that, the value of the validation string must be a dict
and the key of the custom error should be 'err'
. Example:
from django.utils.translation import gettext_lazy as _
VIMAGE = {
'myapp.models': {
'SIZE': {
'lt': 200,
'err': _('Size should be less than <strong>200KB!</strong>'),
},
}
}
Note
If 'err'
is not defined then a well-looking default error will appear.
[IMAGE {rule_name}] Validation error: {value} does not meet validation rule: {rule}.
{rule_name}
is replaced by the corresponding validation string{value}
is replaced by the corresponding image value under test{rule}
is replaced by the corresponding rule in a humanized form
'SIZE'
¶
The 'SIZE'
key corresponds to the image’s file size (measured in KB
). It accepts two kind of value types: int
or dict
.
If it’s an
int
(must be a positive integer) then it is assumed that the file size of the uploaded image will be equal to the value defined.VIMAGE = { 'myapp.models': { # uploaded image file size should be equal to 100KB 'SIZE': 100, } }
If it’s a
dict
, then anystr
from operator strings table will be valid as long as it’s value is anint
(positive integer). Also, take a look at this note.VIMAGE = { 'myapp.models': { # uploaded image file size should be less than 200KB # and greater than 20KB 'SIZE': { 'lt': 200, 'gt': 20, 'err': 'custom error here' # optional }, } }
'DIMENSIONS'
¶
The 'DIMENSIONS'
key corresponds to the image’s dimensions, width and height (measured in px
). It accepts three kind of value types: tuple
, list
or dict
.
If it’s a
tuple
(two-length tuple with positive integers) then it is assumed that the dimensions of the uploaded image will be equal to the value (tuple) defined ((width, height)
).VIMAGE = { 'myapp.models': { # uploaded image dimensions should be equal to 800 x 600px # width == 800 and height == 600px 'DIMENSIONS': (800, 600), } }
If it’s a
list
(one or more two-length tuples with positive integers) then it is assumed that the dimensions of the uploaded image will be equal to one of the values defined in the list.VIMAGE = { 'myapp.models': { # uploaded image dimensions should be equal to one of the # following: 800x600px, 500x640px or 100x100px. 'DIMENSIONS': [(800, 600), (500, 640), (100, 100)], } }
If it’s a
dict
, then there are two cases. Either use operator strings table for keys and a two-length tuple of positive integers for values or use the strings'w'
and/or'h'
for keys and (another)dict
for the value of each one using operator strings table for keys and a positive integer for values. Confused? Below are two examples that cover each case.VIMAGE = { 'myapp.models': { # uploaded image dimensions should be less than 1920x1080px # and greater than 800x768px. 'DIMENSIONS': { 'lt': (1920, 1080), 'gt': (800, 768), 'err': 'custom error here', # optional }, } }
VIMAGE = { 'myapp.models': { # uploaded image width should not be equal to 800px and # height should be greater than 600px. 'DIMENSIONS': { 'w': { 'ne': 800, # set rule just for width 'err': 'custom error here', # optional }, 'h': { 'gt': 600, # set rule just for height 'err': 'custom error here', # optional } }, } }
Note
For custom error to work when defining both
'w'
and'h'
, the'err'
entry should be placed to both'w'
and'h'
dicts.
'FORMAT'
¶
The 'FORMAT'
key corresponds to the image’s format (it doesn’t have a measure unit since it’s just a string), i.e 'jpeg'
, 'png'
, 'webp'
etc.
Taking into account what image formats the browsers support
VIMAGE
allows the most used formats for the web, which are: 'jpeg'
, 'png'
, 'gif'
, 'bmp'
and 'webp'
.
It accepts three kind of value types: str
, list
or dict
.
If it’s a
str
then it is assumed that the format of the uploaded image will be equal to the value (str
) defined.VIMAGE = { 'myapp.models': { # uploaded image format should be 'jpeg' 'FORMAT': 'jpeg', } }
If it’s a
list
(list of strings) then it is assumed that the format of the uploaded image will be equal to one of the values defined in the list.VIMAGE = { 'myapp.models': { # uploaded image format should be one of the following: # 'jpeg', 'png' or 'webp'. 'FORMAT': ['jpeg', 'png', 'webp'] } }
If it’s a
dict
, then the keys must be either'eq'
or'ne'
(since the other operators cannot apply tostr
values) and as for the values they may be either alist
or astr
.VIMAGE = { 'myapp.models': { # uploaded image format should not be 'png'. 'FORMAT': { 'ne': 'png', 'err': 'custom error here', # optional }, } }
VIMAGE = { 'myapp.models': { # uploaded image format should not be equal to # neither `webp` nor 'bmp'. 'FORMAT': { 'ne': ['webp', 'bmp'], 'err': 'custom error here', # optional }, } }
'ASPECT_RATIO'
¶
The 'ASPECT_RATIO'
key corresponds to the image’s width to height ratio (it doesn’t have a measure unit since it’s just a decimal number).
It accepts two kind of value types: float
or dict
.
If it’s a
float
(positive) then it is assumed that the aspect ratio of the uploaded image will be equal to the value (float
) defined.VIMAGE = { 'myapp.models': { # uploaded image aspect ratio should be equal to 1.2 'ASPECT_RATIO': 1.2, } }
If it’s a
dict
, then anystr
from operator strings table will be valid as long as it’s value is a positivefloat
. Also, take a look at this note.VIMAGE = { 'myapp.models': { # uploaded image aspect ratio should be less than 1.2 'ASPECT_RATIO': { 'lt': 2.1, 'err': 'custom error here', # optional }, } }
If you are a table-person maybe this will help you:
Key | Value type |
---|---|
'SIZE' |
<int> - image’s file size should be equal to this number
<dict> - <operator_str>: <int> |
'DIMENSIONS' |
|
'FORMAT' |
|
'ASPECT_RATIO' |
|