import re from django.contrib.gis.geos import GEOSGeometry from django.apps import apps from django.template.loader import render_to_string from django.conf import settings from bs4 import BeautifulSoup import markdown def markdown_to_html(txt): md = markdown.Markdown( extensions=[ 'markdown.extensions.fenced_code', 'markdown.extensions.codehilite(css_class=highlight,linenums=False)', 'markdown.extensions.attr_list', 'footnotes', 'extra' ], output_format='html5', safe_mode=False ) return md.convert(txt) def convertll(lat, lon): pnt = GEOSGeometry('POINT({0} {1})'.format(lon, lat), srid=4326) pnt.transform(3857) return pnt.y, pnt.x def get_latlon(): loc = apps.get_model('locations', 'CheckIn').objects.latest() lat_converted, lon_converted = convertll(loc.lat, loc.lon) return lat_converted, lon_converted def extract_main_image(markdown): soup = BeautifulSoup(markdown, 'html.parser') try: image = soup.find_all('img')[0]['id'] img_pk = image.split('image-')[1] return apps.get_model('photos', 'LuxImage').objects.get(pk=img_pk) except IndexError: return None def parse_image(s): soup = BeautifulSoup(s.group(), "lxml") for img in soup.find_all('img'): cl = img['class'] if cl[0] == 'postpic' or cl[0] == 'postpicright': s = str(img).replace('[[base_url]]', settings.IMAGES_URL) return s else: 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 extra = None if cl[0] == 'cluster': css_class = cl[0] 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, '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