You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

validators.py 1.1KB

123456789101112131415161718192021222324252627282930313233343536
  1. from django.core import validators
  2. from django.core.exceptions import ValidationError
  3. from django.core.urlresolvers import resolve
  4. from django.http import Http404
  5. from django.utils.translation import ugettext_lazy as _
  6. class ExtendedURLValidator(validators.URLValidator):
  7. def __call__(self, value):
  8. try:
  9. super(ExtendedURLValidator, self).__call__(value)
  10. except ValidationError:
  11. if value:
  12. self.validate_local_url(value)
  13. else:
  14. raise
  15. def validate_local_url(self, value):
  16. """
  17. Validate local URL name
  18. """
  19. try:
  20. value = self.fix_local_url(value)
  21. if self.verify_exists:
  22. resolve(value)
  23. self.is_local_url = True
  24. except Http404:
  25. raise ValidationError(_('Specified page does not exist'))
  26. def fix_local_url(self, value):
  27. """
  28. Puts preceding and trailing slashes to local URL name
  29. """
  30. if value != '/':
  31. value = '/' + value.strip('/') + '/'
  32. return value