import re import random import string from django.apps import apps from django.utils.text import slugify from django.template.loader import render_to_string from bs4 import BeautifulSoup import markdown def markdown_to_html(txt): md = markdown.Markdown( extensions=[ 'markdown.extensions.fenced_code', 'markdown.extensions.codehilite', 'markdown.extensions.attr_list', 'footnotes', 'extra' ], extension_configs={ 'markdown.extensions.codehilite': { 'css_class': 'highlight', 'linenums': False }, }, output_format='html5', safe_mode=False ) return md.convert(txt) def parse_image(s): soup = BeautifulSoup(s.group(), "lxml") for img in soup.find_all('img'): cl = img['class'] image_id = img['id'].split("image-")[1] i = apps.get_model('photos', 'LuxImage').objects.get(pk=image_id) caption = False exif = False cluster_class = None is_cluster = False extra = None if cl[0] == 'cluster': css_class = cl[0] is_cluster = True cluster_class = cl[1] try: if cl[2] == 'caption': caption = True elif cl[2] == 'exif': exif = True else: extra = cl[2] if len(cl) > 3: if cl[3] == 'exif': exif = True except: pass elif cl[0] != 'cluster' and len(cl) > 1: css_class = cl[0] if cl[1] == 'caption': caption = True if cl[1] == 'exif': exif = True elif cl[0] != 'cluster' and len(cl) > 2: css_class = cl[0] if cl[1] == 'caption': caption = True if cl[2] == 'exif': exif = True print('caption'+str(caption)) else: css_class = cl[0] return render_to_string("lib/img_%s.html" % css_class, {'image': i, 'caption': caption, 'exif': exif, 'is_cluster': is_cluster, 'cluster_class': cluster_class, 'extra': extra}) def render_images(s): s = re.sub('', parse_image, s) return s def parse_video(s): soup = BeautifulSoup(s, "lxml") if soup.find('video'): return True return False def random_string_generator(size=10, chars=string.ascii_lowercase + string.digits): return ''.join(random.choice(chars) for _ in range(size)) def unique_slug_generator(instance, new_slug=None): if new_slug is not None: slug = new_slug else: try: slug = slugify(instance.title)[:45] except AttributeError: slug = slugify(instance.name)[:45] Klass = instance.__class__ qs_exists = Klass.objects.filter(slug=slug).exists() if qs_exists: new_slug = "{slug}-{randstr}".format( slug=slug, randstr=random_string_generator(size=4) ) return unique_slug_generator(instance, new_slug=new_slug) return slug def comma_splitter(tag_string): return [t.strip().lower() for t in tag_string.split(',') if t.strip()] def comma_joiner(tags): return ', '.join(t.name for t in tags)