本章继续完善短链接服务:显示排行。
模板
{%extends "base.html"%} {%block content%}
<h1>排行</h1>
<table class="table">
<thead>
<tr>
<th>#</th>
<th>短链接</th>
<th>原链接</th>
<th>访问次数</th>
</tr>
</thead>
<tbody>
{% for row in urls %}
<tr>
<td>{{ loop.index }}</td>
<td>
<a href="//{{short_url_domain}}/{{ row.id }}" target="_balnk"
>{{short_url_domain}}/{{ row.id }}</a
>
</td>
<td>
<div
style="width: 100%; height:100%;text-overflow:ellipsis;overflow:hidden;white-space:nowrap;"
>
<a href="{{ row.url }}" target="_balnk">{{ row.url }}</a>
</div>
</td>
<td>{{ row.visit }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{%endblock%}
hanlder
/// 排行
pub async fn rank(Extension(state): Extension<AppState>) -> HandlerHtmlResult {
let handler_name = "rank";
let client = get_client(&state, handler_name).await?;
let result = db::rank(&client)
.await
.map_err(log_error(handler_name.to_string()))?;
let tmpl = RankTemplate {
urls: result,
short_url_domain: state.short_url_cfg.domain.clone(),
};
render(tmpl).map_err(log_error(handler_name.to_string()))
}