Router
urlpatterns!, path parameters, named links.
● ● ●
use runique::prelude::*;
use crate::views::*;
pub fn routes() -> Router {
urlpatterns! {
"/" => view! { index }, name = "index",
"/articles" => view! { article_list }, name = "article_list",
"/articles/{id}" => view! { article_detail }, name = "article_detail",
"/articles/{id}/edit" => view! { article_edit }, name = "article_edit",
"/registration" => view! { registration }, name = "registration",
}
}
// Route: "/articles/{id}"
pub async fn article_detail(mut request: Request) -> AppResult<Response> {
let id = request.path_param("id")
.and_then(|s| s.parse::<i32>().ok())
.unwrap_or(0);
let db = request.engine.db.clone();
let article = article::Entity::find_by_id(id)
.one(&*db).await.unwrap_or(None);
context_update!(request => { "article" => &article });
request.render("article/detail.html")
}
{# Simple route — pre-processed as {{ link(link=''index'') }} #}
<a href=''{% link "index" %}''>Home</a>
{# Route parameter — pre-processed as {{ link(link=''article_detail'', id=article.id) }} #}
<a href=''{% link "article_detail" id=article.id %}''>{{ article.title }}</a>
{# No query — clean URL #}
<a href=''{% link "article_list" %}''>All articles</a>
{# With query — pre-processed as {{ link(link=''article_list'', query={page: 2}) }} #}
<a href=''{% link "article_list" query={page: 2} %}''>Next page</a>