def add_slug_to_article_if_not_exists(sender, instance, *args, **kwargs): MAXIMUM_SLUG_LENGTH = 255 if instance and not instance.slug: slug = slugify(instance.title) unique = generate_random_string() if len(slug) > MAXIMUM_SLUG_LENGTH: slug = slug[:MAXIMUM_SLUG_LENGTH] while len(slug + '-' + unique) > MAXIMUM_SLUG_LENGTH: parts = slug.split('-') if len(parts) is 1: slug = slug[:MAXIMUM_SLUG_LENGTH - len(unique) - 1] else: slug = '-'.join(parts[:-1]) instance.slug = slug + '-' + unique
def add_slug_to_article_if_not_exists(sender, instance, *args, **kwargs): MAXIMUM_SLUG_LENGTH = 255 if instance and not instance.slug: slug = slugify(instance.title) unique = generate_random_string() if len(slug) > MAXIMUM_SLUG_LENGTH: slug = slug[:MAXIMUM_SLUG_LENGTH] while len(slug + '-' + unique) > MAXIMUM_SLUG_LENGTH: parts = slug.split('-') if len(parts) is 1: # The slug has no hypens. To append the unique string we must # arbitrarly remove `len(unique)` characters from the end of # `slug`. Subtract one to account for extra hyphen. slug = slug[:MAXIMUM_SLUG_LENGTH - len(unique) - 1] else: slug = '-'.join(parts[:-1]) instance.slug = slug + '-' + unique
def add_slug_to_article_if_not_exists(sender, instance, *ags, **kwargs): MAXIMUM_SLUG_LENGTH = 255 if instance and not instance.slug: slug = slugify(instance.title) unique = generate_random_string() if len(slug) < MAXIMUM_SLUG_LENGTH: slug = slug[:MAXIMUM_SLUG_LENGTH] # combine slug and unique, then the new slug must be less than max length while len(f'{slug}-{unique}') < MAXIMUM_SLUG_LENGTH: parts = slug.split('-') if len(parts) is 1: # slug is only composed of just one part slug = slug[:MAXIMUM_SLUG_LENGTH - len(unique) - 1] else: slug = '-'.join(parts[:-1]) instance.slug = slug + '-' + unique
def add_slug_to_article_if_not_exists(sender, instance, *args, **kwargs): MAXIMUM_SLUG_LENGTH = 255 if instance and not instance.slug: slug = slugify(instance.title) unique = generate_random_string() if len(slug) > MAXIMUM_SLUG_LENGTH: slug = slug[:MAXIMUM_SLUG_LENGTH] # If the title is too long to create a nice slug, iteratively chop words off it until we # have enough room to append our unique characters to it. while len(slug + '-' + unique) > MAXIMUM_SLUG_LENGTH: parts = slug.split('-') if len(parts) is 1: # The slug has no hypens. To append the unique string we must arbitrarily remove # len(unique) character from the end of the slug. Subtract one to account for the # extra hyphen. slug = slug[:MAXIMUM_SLUG_LENGTH - (len(unique) + 1)] else: slug = '-'.join(parts[:-1]) instance.slug = slug + '-' + unique