Routeur
urlpatterns!, parametres de chemin, liens nommes.
urlpatterns! — declaration des routes
url.rs
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",
"/inscription" => view! { inscription }, name = "inscription",
}
}
urlpatterns! — declaration des routes
url.rs
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",
"/inscription" => view! { inscription }, name = "inscription",
}
}
Lire un parametre de chemin
handler
// 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")
}
Lire un parametre de chemin
handler
// 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")
}
Liens nommes dans les templates
template
{# Route simple — pretraite en {{ link(link=''index'') }} #}
<a href='{% link "index" %}'>Accueil</a>
{# Parametre de route — pretraite en {{ link(link=''article_detail'', id=article.id) }} #}
<a href='{% link "article_detail" id=article.id %}'>{{ article.title }}</a>
{# Sans query — URL propre #}
<a href='{% link "article_list" %}'>Tous les articles</a>
{# Avec query — pretraite en {{ link(link=''article_list'', query={page: 2}) }} #}
<a href='{% link "article_list" query={page: 2} %}'>Page suivante</a>
Liens nommes dans les templates
template
{# Route simple — pretraite en {{ link(link=''index'') }} #}
<a href='{% link "index" %}'>Accueil</a>
{# Parametre de route — pretraite en {{ link(link=''article_detail'', id=article.id) }} #}
<a href='{% link "article_detail" id=article.id %}'>{{ article.title }}</a>
{# Sans query — URL propre #}
<a href='{% link "article_list" %}'>Tous les articles</a>
{# Avec query — pretraite en {{ link(link=''article_list'', query={page: 2}) }} #}
<a href='{% link "article_list" query={page: 2} %}'>Page suivante</a>