dtyz76562 2013-06-08 10:13
浏览 77
已采纳

我做错了什么或如何纠正html中数据存储区键的输出? datastore.Encode()?

I believe my ability and expertise to program is in its infancy. I apologize ... Please do not hesitate to ask questions, correct my style, crudeness, etc. I am going to start from the end. I might have posted too much information.

This is the generated html link. What have I done or missed to force the output to prefix "/Hobby," on the front of my datastore key? The number is correct. I have verified this in the admin panel.

/hobby?action=admin&operation=edit&id=/Hobby,5222955109842944

Pre-rendered html

{{define "content"}}
<h2>{{.PageSetting.Title}}</h2>
<hr />
<a href="/hobby?action=admin&operation=add" class="btn"><i class="icon-pencil"></i>Add Hobby</a>
<table class="table table-striped">
<thead>
    <tr>
        <th>Title</th>
        <th>Created</th>
        <th>Updated</th>
        <th>Operations</th>
    </tr>
</thead>
<tbody>
{{range .PageData.Hobby}}
    <tr>
        <td>{{.Title}}</td>
        <td>{{.CreatedDate.Format "2006.01.02 @ 3:04pm"}}</td>
        <td>{{.UpdatedDate.Format "2006.01.02 @ 3:04pm"}}</td>
        <td>
            <a href="/hobby?action=admin&operation=edit&id={{.Key}}" class="btn"><i class="icon-pencil"></i> Edit</a>
            <a href="/hobby?action=admin&operation=delete&id={{.Key}}" class="btn"><i class="icon-trash"></i> Delete</a>
        </td>
    </tr>
{{end}}
</tbody>
</table>
<div class="pageination">
    <ul class="pager">
    {{if .PageSetting.ShowPrev}}
        <li class="previous">
            <a href="?action=admin&pid={{.PageSetting.PrevPageID}}">&larr; Older</a>
        </li>
    {{end}}
    {{if .PageSetting.ShowNext}}
        <li class="next">
            <a href="?action=admin&pid={{.PageSetting.NextPageID}}">Newer &rarr;</a>
        </li>
    {{end}}
    </ul>
</div>
{{end}}

Functions that generate html

/*
 * New Page
 *
 * @param layout      (string)
 * @param showSidebar (bool)
 * @param pageData    (*PageData)
 *
 * @return (*Page)
 */
func NewPage(pageSetting *PageSetting, pageData *PageData) *Page {
    if pageSetting.Layout == "" {
        pageSetting.Layout = DEFAULT_LAYOUT
    }

    if pageSetting.Title == "" {
        pageSetting.Title = config.Title
    }

    if pageSetting.Description == "" {
        pageSetting.Description = config.Description
    }

    return &Page{ PageSetting: pageSetting, PageData: pageData }
}

/*
 * Render page
 *
 * @param pageFilePath (string)
 * @param w            (http.ResponseWriter)
 *
 * @return (error)
 */
func (page *Page) Render(pageFilePath string, w http.ResponseWriter) (err error) {
    columnFilePath  := page.PageSetting.Layout + ".html"
    mainFilePath    := "main.html"
    contentFilePath := pageFilePath + ".html"
    sidebarFilePath := "sidebar.html"

    var tmpl *template.Template

    switch page.PageSetting.ShowSidebar {
        case true:
            tmpl, err = template.ParseFiles(
                            LAYOUT_FOLDER + mainFilePath,
                            LAYOUT_FOLDER + columnFilePath,
                            LAYOUT_FOLDER + sidebarFilePath,
                            STATIC_FOLDER + contentFilePath)
        case false:
            tmpl, err = template.ParseFiles(
                            LAYOUT_FOLDER + mainFilePath,
                            LAYOUT_FOLDER + columnFilePath,
                            STATIC_FOLDER + contentFilePath)

    }

    if err != nil {
        return
    }

    tmpl.Execute(w, page)
    return
}

Functions to generate 'Hobby'

type HobbyDB struct {
    Key *datastore.Key `datastore:"-"`
    Title string
    Description []byte
    CreatedDate time.Time
    UpdatedDate time.Time
}

type HobbyData struct {
    Key *datastore.Key `datastore:"-"`
    Title string
    Description string
    CreatedDate time.Time
    UpdatedDate time.Time
}

func getHobbyData(dbQuery *datastore.Query, MDOutput bool, c appengine.Context) (hobbyData []HobbyData , err error) {
    var h []*HobbyDB
    k, err := dbQuery.GetAll(c, &h)
    if err != nil {
        return
    }

    hobbyData = make([]HobbyData, len(h))
    for i := range h {
        hobbyData[i].Key = k[i]
        hobbyData[i].Title = h[i].Title
        if MDOutput {
            hobbyData[i].Description = string(blackfriday.MarkdownCommon(h[i].Description))
        } else {
            hobbyData[i].Description = string(h[i].Description)
        }
        hobbyData[i].CreatedDate = h[i].CreatedDate
        hobbyData[i].UpdatedDate = h[i].UpdatedDate
    }
    return
}

func hobbyList(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)

    // Get hobby data

    // Get page id
    pageId, _ := strconv.Atoi(getUrlQuery(r.URL, "pid"))
    pageSize  := 10

    // Get offset and page numbers
    offset, pageNums := getOffset("Hobby", pageId, pageSize, c)

    // New PageSetting
    pageSetting := new(PageSetting)

    // Setting PageSetting
    pageSetting.Title  = "Hobby Manager - " + config.Title
    pageSetting.Layout = "column1"

    // showNext and showPrev button
    if pageId <= 0 || pageId > pageNums {
        pageId = 1
    }
    if pageId < pageNums {
        pageSetting.ShowPrev = true
    }
    if pageId != 1 {
        pageSetting.ShowNext = true
    }
    pageSetting.PrevPageID = pageId + 1
    pageSetting.NextPageID = pageId - 1

    // Get hobby data
    dbQuery := datastore.NewQuery("Hobby").Order("-UpdatedDate").Offset(offset).Limit(pageSize)
    hobbyData, err := getHobbyData(dbQuery, false, c)
    if err != nil {
        serveError(c, w, err)
        return
    }

    // New PageData
    pageData := &PageData{ Hobby: hobbyData }

    // New Page
    page := NewPage(pageSetting, pageData)

    // Render page
    page.Render("hobby/admin", w)
}
  • 写回答

2条回答 默认 最新

  • dpbz14739 2013-06-09 04:15
    关注

    Change .Key to .Key.IntID:

    <a href="/hobby?action=admin&operation=edit&id={{.Key.IntID}}">
    

    Docs: http://godoc.org/code.google.com/p/appengine-go/appengine/datastore#Key.IntID

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助