Beispiel #1
0
    def __init__(self,
                 route,
                 model=None,
                 editavailable=None,
                 list_display_links=None,
                 object_display=None,
                 related_field=None,
                 url_bits_mapping=None,
                 routes=None,
                 always_load_fields=None,
                 **kwargs):
        self.model = model
        ResolverMixin.__init__(self, route)
        RendererMixin.__init__(self, **kwargs)
        if routes:
            base_routes = OrderedDict(((r.name, r) for r in self.base_routes))
            base_routes.update(((r.name, r) for r in routes))
            self.base_routes = list(itervalues(base_routes))
        else:
            self.base_routes = list(self.base_routes)
        if not self.pagination:
            self.pagination = html.Pagination()
        self.object_views = []
        self.model_url_bits = ()
        self.editavailable = editavailable if editavailable is not None else\
                                self.editavailable
        self.list_display_links = list_display_links or self.list_display_links
        self.related_field = related_field or self.related_field
        self.always_load_fields = always_load_fields or self.always_load_fields
        if self.parent_view and not self.related_field:
            raise UrlException('Parent view "{0}" specified in\
 application {1} without a "related_field".'.format(self.parent_view, self))
        self.object_display = object_display or self.object_display
        self.url_bits_mapping = self.url_bits_mapping or url_bits_mapping
        self.clear()
Beispiel #2
0
class ApplicationGroup(views.Application):
    '''An :class:`djpcms.views.Application` class for
administer a group of :class:`djpcms.views.Applications`.'''
    has_plugins = False
    pagination = html.Pagination(('name','actions'),
                                 ajax=False,
                                 html_data={'options':{'sDom':'t'}})

    home = views.View(in_nav=1,
                      methods=('get',),
                      renderer=lambda request, **kwargs:\
                            request.appmodel.models_list(request, **kwargs))

    @html.render_block
    def models_list(self, request, **kwargs):
        all = []
        for c in self.query(request):
            links = Widget('div',
                           views.application_views_links(c),
                           cn=classes.button_holder)
            all.append(Widget('dl', (Widget('a', c.title, href=c.url), links)))
        if all:
            return Widget('div', all, cn=classes.object_definition)
        else:
            return ''
Beispiel #3
0
class AdminApplicationSimple(views.Application):
    pagination = html.Pagination(('__str__',))
    has_plugins = False
    search = views.SearchView()
    delete_all = views.DeleteAllView()
    view = views.ViewView()
    delete = views.DeleteView()
Beispiel #4
0
 def pagination(self, **kwargs):
     pag = html.Pagination(self.heads, **kwargs)
     self.assertTrue(pag.headers)
     self.assertTrue(pag.list_display)
     self.assertEqual(len(pag.headers), len(pag.list_display))
     self.assertTrue(pag.astable)
     for c, head in zip(self.heads, pag.list_display):
         self.assertEqual(c, head.code)
     return pag
Beispiel #5
0
class DesignApplication(views.Application):
    pagination = html.Pagination(('id', 'timestamp'))
    home = views.SearchView()
    add = views.AddView(form=AddThemeHtml, has_plugins=True, name='Add theme')
    view = views.ViewView()
    forms_view = views.View('/forms')

    def render_instance_default(self, request, instance, **kwargs):
        return get_form(request, ThemeInputsHtml)
Beispiel #6
0
class AdminApplication(views.Application):
    has_plugins = False
    views_ordering = {'description': 0,
                      'change': 1}
    pagination = html.Pagination(('__str__',))

    home = views.SearchView()
    add = views.AddView()
    delete_all = views.DeleteAllView()
    view = TabView(in_nav=0)
    description = views.ObjectView('/description',
                                   in_nav=0,
                                   parent_view='view',
                                   renderer=lambda r, **kwargs:\
                                   r.appmodel.render_instance(r, **kwargs))
    change = views.ChangeView(force_redirect=False)
    delete = views.DeleteView()
Beispiel #7
0
 def render(self,
            request,
            block=None,
            for_model=None,
            max_display=5,
            filter=None,
            exclude=None,
            order_by=None,
            descending=False,
            text_search=None,
            headers=None,
            display_if_empty='',
            table_footer=False,
            **kwargs):
     instance = request.instance
     request = request.for_model(for_model)
     if request is None or request.model is None:
         return ''
     # Check that we can actually see the model
     if not request.has_permission(permissions.VIEW):
         return ''
     view = request.view
     appmodel = view.appmodel
     mapper = appmodel.mapper
     load_only = ()
     thead = None
     appheads, _ = request.pagination.header_info(request)
     if headers:
         thead = []
         for head in headers:
             if head in appheads:
                 thead.append(appheads[head])
     # Ordering
     if order_by:
         order_by = html.attrname_from_header(appheads, order_by)
         if order_by and descending:
             order_by = '-{0}'.format(order_by)
     # query with the instance of the current page
     qs = view.query(request, instance=instance)
     if text_search:
         qs = qs.search(text_search)
     filter = mapper.query_from_mapping(
         attrquery(appheads, QueryDict(filter)))
     exclude = mapper.query_from_mapping(
         attrquery(appheads, QueryDict(exclude)))
     qs = qs.filter(**filter).exclude(**exclude).sort_by(order_by)\
            .load_only(*appmodel.load_fields(thead))
     max_display = max(int(max_display), 1)
     items = qs[0:max_display]
     if not items and not display_if_empty:
         return ''
     if thead:
         title = block.title if block is not None else None
         pagination = html.Pagination(thead,
                                      footer=table_footer,
                                      html_data={'options': {
                                          'sDom': 't'
                                      }})
         return pagination.widget(request,
                                  appmodel.table_generator(
                                      request, thead, items),
                                  title=title,
                                  appmodel=appmodel).render(request)
     else:
         w = html.Widget('div', cn = 'filtered-list')\
                 .addClass(appmodel.mapper.class_name())
         render_instance = appmodel.render_instance_list
         w.add((render_instance(request, item) for item in items))
         return w