code: func (pr *publishRequest) serveSubjectTemplate() {
  	res, err := pr.ph.deepDescribe(pr.subject)
  	if err != nil {
  		httputil.ServeError(pr.rw, pr.req, err)
  		return
  	}
  	pr.ph.cacheDescribed(res.Meta)
  
  	subdes := res.Meta[pr.subject.String()]
  	if subdes.CamliType == "file" {
  		pr.serveFileDownload(subdes)
  		return
  	}
  
  	headerFunc := func() *publish.PageHeader {
  		return pr.subjectHeader(res.Meta)
  	}
  	fileFunc := func() *publish.PageFile {
  		file, err := pr.subjectFile(res.Meta)
  		if err != nil {
  			logf("%v", err)
  			return nil
  		}
  		return file
  	}
  	membersFunc := func() *publish.PageMembers {
  		members, err := pr.subjectMembers(res.Meta)
  		if err != nil {
  			logf("%v", err)
  			return nil
  		}
  		return members
  	}
  	page := &publish.SubjectPage{
  		Header:  headerFunc,
  		File:    fileFunc,
  		Members: membersFunc,
  	}
  
  	err = pr.ph.goTemplate.Execute(pr.rw, page)
  	if err != nil {
  		logf("Error serving subject template: %v", err)
  		http.Error(pr.rw, "Error serving template", http.StatusInternalServerError)
  		return
  	}
  }
docs: // serveSubjectTemplate creates the funcs to generate the PageHeader, PageFile,
  // and pageMembers that can be used by the subject template, and serves the template.