使用PUG和FLASK的动态内容的条件

时间:2017-03-02 20:40:13

标签: flask pug prepros

这是烧瓶文件。

from flask import render_template
from app import app

@app.route('/')
@app.route('/index')
def index():
    user = {'nickname': 'Miguel'}  # fake user
    return render_template('index.html',title='Home',user=user)

这是帕格文件:

doctype html
html(lang="en")
    head
        title pageTitle

        if title
            title {{ title }} - microblog
        else if !title
            title Welcome to microblog1
        else
            title Welcome to microblog2

    body
    h1 Hello,  {{ user.nickname }}!
    if {{ user.nickname }} == "Miguel"
        h1 Miguel

这是index.html在使用Prepros转换后的样子:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>pageTitle</title>
        <title>Welcome to microblog1</title>
    </head>
    <body>
        <h1>Hello,  {{ user.nickname }}!</h1>
        <h1>{{ user.nickname }}</h1>
        <h1># user.nickname</h1>
    </body>
</html>

我可以使用我的PUG文件从FLASK获取动态内容。 所以脚本中的以下内容有效:

h1 Hello,  {{ user.nickname }}!

输出是“你好,Miguel!”

但这部分不起作用。

if {{ user.nickname }} == "Miguel"
        h1 Miguel

我收到语法错误:意外的令牌。所以我可以从Flask获得名称,但我不能在if语句中使用它? 我不确定我做错了什么或是否只是不支持。 顺便说一句,我正在使用Prepros(提供错误)将我的PUG文件转换为HTML。

可能与之相关的一点是,当我通过Prepros转换我的文件时,我并没有真正得到我期望的结果。

这是来自PUG文件:

title pageTitle
if title
    h1 {{ title }}
else if !title
    title Welcome to microblog1

在我希望的html中:

<title>pageTitle</title>
{% if title %}
    <title>{{ title }}</title>
{% else if !title %}
    <title> Welcome to microblog1

但我最终得到了:

<title>pageTitle</title>
<title>Welcome to microblog1</title>

就好像Prepros在转换为HTML之前回答了IF语句。这意味着代码不是动态的。我是PUG和FLASK的新手,所以我不确定在哪里尝试找到解决方案。

3 个答案:

答案 0 :(得分:1)

谢谢你们。找到了解决方案。

| {% if user.nickname == 'Miguels'%}
|   h1 Miguel
| {% endif %}

然后在HTML中出现:

{% if user.nickname == 'Miguels'%}
    h1 Miguel
{% endif %}

这也解决了转换中回答IF语句的问题。

@ CS01 谢谢,那篇文章是我找到解决方案的地方。 “ - ”不起作用。

@Shea Belsky 谢谢。我知道它存在,因为它用“打印”它:

h1 user.nickname

答案 1 :(得分:0)

双花括号{{ }}无效Pug语法。 (我认为它是另一个HTML预处理器的一部分,我不记得我头脑中的东西)。在Pug中,以英镑符号#{}为前缀的两个花括号表示可以运行以返回某些内容的代码。你的源pug文件看起来像这样,然后:

doctype html
html(lang="en")
    head
        title pageTitle

        if title
            title #{ title } - microblog
        else if !title
            title Welcome to microblog1
        else
            title Welcome to microblog2

    body
    h1 Hello,  #{ user.nickname }!
    if #{ user.nickname } == "Miguel"
        h1 Miguel

在循环或条件内指示变量时,不需要使用该语法。你可以只做if variable === "something",这应该可以正常工作。

在您的示例中,您将if语句更改为不具有任何花括号。

if user.nickname == "Miguel"
    h1 Miguel

如果您总是要为用户的昵称使用h1,则可以直接使用这些花括号嵌入它。

h1 #{user.nickname}

最后,您的代码中有两个title元素,这就是它出现两次的原因。您可以取出最顶层的一个(title pageTitle),以便只显示一个内容,其中内容取决于传递给处理器的有效title变量。

答案 2 :(得分:0)

我认为你正在寻找def getSeatNum(jid): statement = '''SELECT tk_id, tk_seat_number FROM tickets WHERE tk_journey = '%s' ORDER BY tk_id DESC LIMIT 1;''' cursor.execute(statement, jid) row = cursor.fetchone() seat_num = row[0] return(seat_num) seat_no = getSeatNum(jid) 角色。

-

将是

if {{ user.nickname }} == "Miguel"
        h1 Miguel

来源:https://github.com/matannoam/pypugjs#using-templatetags-and-any-feature-of-the-compiled-to-language

- if user.nickname == 'Miguel'
    h1 Miguel