Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

validators.py 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  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.lstrip('/')
  32. q_index = value.find('?')
  33. if q_index > 0:
  34. value = value[:q_index]
  35. return value