def item_view(request, *args, **kwargs): """ This is the view that takes care of all valid URLs starting with "/viewing/". It finds the appropriate viewer and dispatches the request to it. """ viewer_name = kwargs["viewer"] action = kwargs.get("action") noun = kwargs.get("noun") format = kwargs.get("format") viewer_class = get_viewer_class_by_name(viewer_name) if viewer_class: viewer = viewer_class() viewer.init_for_http(request, action, noun, format) response = viewer.dispatch() if response is None: return viewer.render_error( "Action Not Found", "We could not find any action matching your URL.", HttpResponseNotFound ) else: return response else: viewer = ItemViewer() viewer.init_for_http(request, action, noun, format) return viewer.render_error( "Viewer Not Found", "We could not find any viewer matching your URL.", HttpResponseNotFound )
from cms.models import * from django.core.exceptions import ObjectDoesNotExist from django.http import QueryDict from django.utils import datastructures, simplejson from cms.views import ItemViewer from cms.base_viewer import get_viewer_class_by_name, get_current_site, all_viewer_classes from django.conf import settings # Import viewers from modules so they get registered with ViewerMetaClass for module_name in settings.MODULE_NAMES: __import__("modules.%s.views" % module_name) # Check that all default viewers have been defined properly for item_type in all_item_types(): viewer_name = item_type.__name__.lower() viewer_class = get_viewer_class_by_name(viewer_name) if viewer_class is None: raise Exception("No default viewer defined for %s" % item_type) if viewer_class.accepted_item_type != item_type: raise Exception( "Viewer with name `%s` has accepted_item_type=%s, should be %s" % (viewer_name, viewer_class.accepted_item_type, item_type) ) # Check that all viewers inherit from the correct superclasses for viewer_class in all_viewer_classes(): item_type = viewer_class.accepted_item_type if item_type != Item: desired_bases = item_type.__bases__ actual_bases = tuple(base.accepted_item_type for base in viewer_class.__bases__) if desired_bases != actual_bases: