def render_page(page, solution=None, vars=None, **kwargs): lesson = page.lesson def static_url(path): return url_for('lesson_static', lesson=lesson, path=path) try: content = page.render_html( solution=solution, static_url=static_url, lesson_url=kwargs.get('lesson_url', lesson_url), vars=vars) except FileNotFoundError: abort(404) kwargs.setdefault('lesson', lesson) kwargs.setdefault('page', page) if solution is not None: template_name = 'solution.html' kwargs.setdefault('solution_number', solution) else: template_name = 'lesson.html' kwargs.setdefault('title', page.title) kwargs.setdefault('content', content) return render_template(template_name, **kwargs, **vars_functions(vars), edit_path=page.edit_path)
def session_coverpage(course, session, coverpage): """Render the session coverpage. Args: course course where the session belongs session name of the session coverpage coverpage of the session, front is default Returns: rendered session coverpage """ session = course.sessions.get(session) def lesson_url(lesson, *args, **kwargs): return url_for('course_page', course=course, lesson=lesson, *args, **kwargs) def session_url(session): return url_for("session_coverpage", course=course, session=session, coverpage=coverpage) content = session.get_coverpage_content(course, coverpage, app) template = "coverpage.html" if coverpage == "back": template = "backpage.html" homework_section = False link_section = False cheatsheet_section = False for mat in session.materials: if mat.url_type == "homework": homework_section = True if mat.url_type == "link": link_section = True if mat.url_type == "cheatsheet": cheatsheet_section = True return render_template(template, content=content, session=session, course=course, lesson_url=lesson_url, **vars_functions(course.vars), edit_path=session.get_edit_path(course, coverpage), homework_section=homework_section, link_section=link_section, cheatsheet_section=cheatsheet_section)
def run(run): def lesson_url(lesson, *args, **kwargs): return url_for('run_page', run=run, lesson=lesson, *args, **kwargs) try: return render_template('course.html', course=run, plan=run.sessions, title=run.title, lesson_url=lesson_url, **vars_functions(run.vars), edit_path=run.edit_path) except TemplateNotFound: abort(404)
def course(course): def lesson_url(lesson, *args, **kwargs): return url_for('course_page', course=course, lesson=lesson, *args, **kwargs) try: return render_template( 'course.html', course=course, plan=course.sessions, title=course.title, lesson_url=lesson_url, **vars_functions(course.vars), edit_path=course.edit_path) except TemplateNotFound: abort(404)
def course_content(course): def lesson_url(lesson, *args, **kwargs): if kwargs.get("page") == "index": kwargs.pop("page") return url_for('course_page', course=course, lesson=lesson, *args, **kwargs) return render_template("content/course.html", course=course, title=course.title, plan=course.sessions, lesson_url=lesson_url, **vars_functions(course.vars))
def session_coverpage_content(course, session, coverpage): def lesson_url(lesson, *args, **kwargs): if kwargs.get("page") == "index": kwargs.pop("page") return url_for('course_page', course=course, lesson=lesson, *args, **kwargs) content = session.get_coverpage_content(course, coverpage, app) homework_section = False link_section = False cheatsheet_section = False for mat in session.materials: if mat.url_type == "homework": homework_section = True if mat.url_type == "link": link_section = True if mat.url_type == "cheatsheet": cheatsheet_section = True return render_template( "content/coverpage.html" if coverpage == "front" else "content/backpage.html", course=course, session=session, homework_section=homework_section, link_section=link_section, cheatsheet_section=cheatsheet_section, content=content, lesson_url=lesson_url, **vars_functions(course.vars), )
def render_html( self, solution=None, static_url=None, lesson_url=None, subpage_url=None, vars=None, ): lesson = self.lesson if not vars: vars = {} else: vars = dict(vars) vars.update(self.vars) solutions = [] if static_url is None: def static_url(path): return 'static/{}'.format(path) if lesson_url is None: def lesson_url(lesson, page='index', solution=None): lesson = self.root.get_lesson(lesson) url = '../../{}/'.format(lesson.slug) if page != 'index' or solution is not None: url += '{}/'.format(page) if solution is not None: url += '{}/'.format(solution) return url if subpage_url is None: def subpage_url(page): return lesson_url(lesson=lesson, page=page) kwargs = { 'static': lambda path: static_url(path), 'lesson_url': lambda lesson, page='index', solution=None: lesson_url( lesson=lesson, page=page, solution=solution), 'subpage_url': subpage_url, 'lesson': lesson, 'page': self, '$solutions': solutions, } kwargs.update(vars_functions(vars)) if self.jinja: template = self._get_template() content = template.render(**kwargs) else: with self.path.open() as file: content = file.read() def convert_url(url): prefix = 'static/' if not url.startswith(prefix): return url return static_url(url[len(prefix):]) if self.style == 'md': content = jinja2.Markup(convert_markdown(content, convert_url)) elif self.style == 'ipynb': content = jinja2.Markup(convert_notebook(content, convert_url)) else: template = self._get_template() content = jinja2.Markup(content) if solution is None: return content else: return solutions[solution]