You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maud HTML中通过Cargo.toml特性标志控制div显隐

在Maud HTML中通过Rust特性标志控制元素显示的正确方式

问题场景

在基于Maud的Rust Web应用中,计划通过Cargo特性标志(administrator/reader)控制不同角色对应的div区块显示:仅当启用administrator特性时显示管理员UI,启用reader特性时显示读者UI。但原有代码无论如何设置特性标志都无法按预期生效,且无报错信息。

问题原因

  1. Maud语法缺失外层大括号:原代码中条件分支(@if/@else if)的逻辑块未被正确包裹,导致Maud宏无法识别条件判断结构
  2. 多余分支干扰:曾添加不必要的else分支(如div.none),覆盖了预期的条件逻辑

修正后的代码

Cargo.toml

[dependencies]
maud = "0.21.0"

[features]
administrator = []
reader = []
default = ["reader"]

main.rs

use maud::html;
use maud::Markup;

fn main() {
    let htmlcontent = render_html();
    println!("Html content:{}", htmlcontent.into_string())
}

pub fn render_html() -> Markup {
 html! {
    {@if cfg!(feature = "administrator") {
       div.block {
         // 管理员相关UI控件
       }
    } @else if cfg!(feature = "reader") {
       div.block {
         // 读者相关UI控件
      }
    }}
 }
}

关键说明

  • 必须将整个@if/@else if条件结构用外层大括号包裹,这是Maud宏解析条件逻辑的要求
  • cfg!(feature = "...")是Rust内置的编译期宏,会根据构建时指定的特性标志编译对应代码块
  • 验证方式:
    • 构建管理员版本:cargo build --features administrator
    • 构建默认读者版本:cargo build
    • 构建无特性版本:cargo build --no-default-features

内容的提问来源于stack exchange,提问作者ZoomZoom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 01:03:31