Qute- 使用#if 等中包含的数据

Qute- Use data included in #if, etc

我正在尝试使用 Qute 将我的网页模板化。我有一个主网页模板,它包含在页面的特定模板中并从中获取数据。

我的问题是特定模板中给出的数据似乎无法在 {#insert val}... 之外引用。例如,我的标题和页面内容工作正常,因为它们是常规插入,但我想将列表和标志传递到我的主模板以以更动态的方式显示数据:

主页模板:

<!doctype html>
<html lang="en">
<head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<!--    <link rel="shortcut icon" href="/res/media/logo.svg"/>-->
    <title>{#insert title}{/} - Open QuarterMaster</title>

    <!-- CSS -->
    <link rel="stylesheet" href="/res/style/bootstrap-adjust.css">
    <link href="/lib/bootstrap/bootstrap-5.1.3-dist/bootswatch.litera.min.css" rel="stylesheet">
    <link rel="stylesheet" href="/lib/fontawesome-free-5.15.4-web/css/all.css">
    <link rel="stylesheet" href="/lib/spin.js/spin.css">
    <link rel="stylesheet" href="/res/css/main.css">
    {#if styleSheets??}
    {#for styleSheet in styleSheets}
    <link rel="stylesheet" href="{styleSheet}">
    {/for}
    {/if}

    <style>
    {#insert pageStyle}/* No page css */ {/}
    </style>
</head>
<body>
<span id="pageInfo" data-page-initted="false" data-auth-type="{config:['service.authMode']}"></span>
<!-- nav here -->
{#if showNavbar}
<!-- TODO:: navbar -->nav
{/if}
<div id="mainContainer" class="container">

    <div id="messageDiv">

    </div>

    <main role="main">
        {#insert pageContent}<h1>No body!</h1>{/}
    </main>

    <hr/>

</div>

<script src="/lib/jquery-3.6.0/jquery.min.js"></script>
<script src="/lib/bootstrap/bootstrap-5.1.3-dist/js/bootstrap.bundle.min.js"></script>
<script src="/lib/js-cookie-3.0.1/js.cookie.min.js"></script>
<script src="/res/js/main.js"></script>
{#if styleSheets??}
{#for script in scripts}
<script src="{script}"></script>
{/for}
{/if}
<script>
{#insert pageScript}{/}
</script>
</body>
</html>

索引页面模板:

{#include webui/mainWebPageTemplate}
{#title}Login{/title}
{#pageStyle}/* ? */{/pageStyle}
{#showNavbar}false{/showNavbar}
{#pageContent}
<h1>
    {config:['service.nameFull']}
</h1>
<ul>
    <li><a href="/openapi-ui/index.html">OpenAPI</a></li>
    <li><a href="/q/health-ui/index.html">Health UI</a></li>
    <li><a href="/q/dev/">Dev UI</a></li>
</ul>


{/pageContent}
{/include}

我在 {#if showNavbar} 语句中看到一个具体问题,该语句目前给出了 Entry "showNavbar" not found in the data map in expression {showNavbar}。我已经看到 ?? 语法似乎是如何工作的,但是当值从未真正进入时很难应用。

有什么想法吗?

无法定义不引用包含模板中的 {#insert} 部分的嵌套块。换句话说,您只能在主页模板中使用{#insert showNavbar}

但是,您可以使用 showNavbar 作为参数,即 {#include webui/mainWebPageTemplate showNavbar=true} 并跳过 {#showNavbar}false{/showNavbar} 部分。