lib/page.py
changeset 10 d83b10c210e3
parent 9 2a47b00f60b0
child 11 fa216534ae45
equal deleted inserted replaced
9:2a47b00f60b0 10:d83b10c210e3
    63     def _add_item (self, url, title) :
    63     def _add_item (self, url, title) :
    64         """
    64         """
    65             Add item to pages list
    65             Add item to pages list
    66         """
    66         """
    67 
    67 
       
    68         # remove index from URL
       
    69         if url.endswith('/index') or url == 'index' :
       
    70             url = url[:-len('/index')]
       
    71 
    68         self.pages.append((url, title))
    72         self.pages.append((url, title))
    69     
    73     
    70     def get_title (self, page) :
    74     def get_title (self, page) :
    71         """
    75         """
    72             Gets the title for the given page, or None if not found
    76             Gets the title for the given page, or None if not found
   118         self.url = url
   122         self.url = url
   119         self.path = path
   123         self.path = path
   120         self.basename = basename
   124         self.basename = basename
   121         self.url_tail = url_tail
   125         self.url_tail = url_tail
   122 
   126 
       
   127         # unbound
       
   128         self.request = None
       
   129 
   123         # sub-init
   130         # sub-init
   124         self._init()
   131         self._init()
   125 
   132 
   126     def _init (self) :
   133     def _init (self) :
   127         """
   134         """
   128             Do initial data loading, etc
   135             Do initial data loading, etc
   129         """
   136         """
   130         
   137         
   131         pass
   138         pass
       
   139 
       
   140     def bind_request (self, request) :
       
   141         """
       
   142             Bind this page-render to the given request
       
   143         """
       
   144 
       
   145         self.request = request
   132 
   146 
   133     @property
   147     @property
   134     def title (self) :
   148     def title (self) :
   135         """
   149         """
   136             Return the page's title
   150             Return the page's title
   177     def content (self) :
   191     def content (self) :
   178         """
   192         """
   179             Loads the .tmpl file, and renders it
   193             Loads the .tmpl file, and renders it
   180         """
   194         """
   181 
   195 
   182         return template.render_file(self.path)
   196         return template.render_file(self.path,
       
   197             request     = self.request,
       
   198         )
   183 
   199 
   184 # list of page handlers, by type
   200 # list of page handlers, by type
   185 TYPE_HANDLERS = [
   201 TYPE_HANDLERS = [
   186     ('html',                    HTMLPage        ),
   202     ('html',                    HTMLPage        ),
   187     (template.TEMPLATE_EXT,     TemplatePage    ),
   203     (template.TEMPLATE_EXT,     TemplatePage    ),
   213 
   229 
   214     # name segments
   230     # name segments
   215     segments = name.split('/')
   231     segments = name.split('/')
   216 
   232 
   217     # iterate through the parts of the page segments
   233     # iterate through the parts of the page segments
   218     while segments :
   234     while True :
       
   235         segment = None
       
   236 
   219         # pop segment
   237         # pop segment
   220         segment = segments.pop(0)
   238         if segments :
   221 
   239             segment = segments.pop(0)
   222         # add to page url
   240 
   223         url_segments.append(segment)
   241             url_segments.append(segment)
   224 
   242 
   225         # translate empty -> index
   243         # translate empty -> index
   226         if not segment :
   244         if not segment :
   227             segment = 'index'
   245             segment = 'index'
   228         
   246 
   229         # look for it in the dir
   247         # look for it in the dir
   230         for filename in os.listdir(path) :
   248         for filename in os.listdir(path) :
   231             # build full file path
   249             # build full file path
   232             file_path = os.path.join(path, filename)
   250             file_path = os.path.join(path, filename)
   233 
   251 
   252             
   270             
   253             else :
   271             else :
   254                 # inspect next file in dir
   272                 # inspect next file in dir
   255                 continue
   273                 continue
   256 
   274 
       
   275         else :
       
   276             # did not find any dir or file, break out of while loop
       
   277             break
       
   278 
   257     # did not find the filename we were looking for in os.listdir
   279     # did not find the filename we were looking for in os.listdir
   258     raise PageError("Page not found: %s" % name, status='404 Not Found')
   280     raise PageError("Page not found: %s" % name, status='404 Not Found')
   259 
   281