docs: def bill(request, abbr, session, bill_id):
      '''
      Context:
          - vote_preview_row_template
          - abbr
          - metadata
          - bill
          - show_all_sponsors
          - sponsors
          - sources
          - nav_active
  
      Templates:
          - billy/web/public/bill.html
          - billy/web/public/vote_preview_row.html
      '''
      # get fixed version
      fixed_bill_id = fix_bill_id(bill_id)
      # redirect if URL's id isn't fixed id without spaces
      if fixed_bill_id.replace(' ', '') != bill_id:
          return redirect('bill', abbr=abbr, session=session, bill_id=fixed_bill_id.replace(' ', ''))
      bill = db.bills.find_one({settings.LEVEL_FIELD: abbr, 'session': session,
                                'bill_id': fixed_bill_id})
      if bill is None:
          raise Http404(u'no bill found {0} {1} {2}'.format(abbr, session, bill_id))
  
      show_all_sponsors = request.GET.get('show_all_sponsors')
      if show_all_sponsors:
          sponsors = bill.sponsors_manager
      else:
          sponsors = bill.sponsors_manager.first_fifteen
  
      return render(
          request, templatename('bill'),
          dict(vote_preview_row_template=templatename('vote_preview_row'),
               abbr=abbr,
               metadata=Metadata.get_object(abbr),
               bill=bill,
               show_all_sponsors=show_all_sponsors,
               sponsors=sponsors,
               sources=bill['sources'],
               nav_active='bills'))