Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This document describes how to extend the edX platform with a new tab that can be added to courses.

...

MethodSignatureDescription
is_enabled
def is_enabled(cls, course, user=None)
Returns true if this tab is enabled for the current course for the specified user. If user is None, this method is being called by Studio and should generally return True if the tab will be shown to at least some students.
validate
def validate(cls, tab_dict, raise_error=True)
Validates a dictionary representing a course tab. If raise_error then issues are raised as exceptions, else the function should return True if the dictionary is valid.
Note

The course stores a static list of its tabs in the database, and this list is only updated when one of the following actions take place:

  1. You create a new course.
  2. You update the advanced settings for your course.

This means that if you have a pre-existing course then it won't immediately show a tab even after you've registered the new entry point.

3. Implement the view

You have two choices when implementing your new tab view:

  1. Implement a view which renders only the contents of your new tab
    • This view must subclass DjangoView and use the mixin DjangoFragmentViewMixin.
    • Implement the render_to_fragment method which should render the content.
    • See the Discussions tab example below to see how this works.
  2. Implement a full page view
    • You must render a mako template with the correct boilerplate to show the tabs correctly. An example would be as follows:

      Code Block
      languagexml
      ## mako
      <%! from django.utils.translation import ugettext as _ %>
      <%namespace name='static' file='/static_content.html'/>
      <%inherit file="/main.html" />
      <%block name="bodyclass">view-PAGE-SLUG is-in-course course</%block>
      <%block name="pagetitle">${_("PAGE NAME")}</%block>
      <%block name="headextra">
      <%static:css group='style-course'/>
      </%block>
      <%include file="/courseware/course_navigation.html" args="active_page='PAGE-SLUG'" />
       
      TEMPLATE CODE
    • Be sure to fill in PAGE-SLUG and PAGE NAME with the correct slug and name for your new page. Replace TEMPLATE_CODE with the Mako markup and code for the rest of the page.

    • See the Teams tab example below to see how this works.

Examples

Anchor

...

discussion-example

...

discussion-example
Fragment Example: Discussions tab

The Discussions feature renders its tab as a web fragment. Here's how it works:

...

If your new tab type isn't returned then that means that the entry point registration didn't work. 

  • Try the following:
    • check that you registered your new tab in setup.py. 
    • If you added your new Django app into edx-platform, then add it here:
    • make sure that you've increased the version number so that pip knows that it needs to reinstall
    • try manually reinstalling the app. For an edx-platform extension, do the following in devstack:
      • No Format
        sudo su edxapp
        pip install -e /edx/app/edxapp/edx-platform

...