输出HTML无序列表python

2024-09-28 19:00:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python编写一个函数,该函数将获取一个我定义的字符串列表,并将它们显示为一个字符串,即HTML无序的字符串列表。到目前为止,我的代码是:

def pizzatoppings(self):
    toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce'];
    for s in toppings:
        ul += "<li>"+str(s)+"</li>"
        ul += "</ul>"
        return ul

当我试图运行这个,但我没有回溯,什么也没有发生。有人知道为什么会这样吗?我知道这可能是一个微不足道的问题,但我已经寻找答案,找不到解决办法。谢谢!


Tags: 函数字符串代码self列表定义defhtml
2条回答

看起来你在试图建立一个网站。为什么不使用一个模板引擎,比如Jinja2,而不是从函数中打印一个HTML片段呢?为此,您将需要一个Python web应用程序,它似乎是在一个web框架中编写的。我会选择Flask这里,开始使用它很简单,Jinja是Flask的默认模板引擎。

如果您只想生成静态HTML文件,我建议您使用Frozen-Flask,它允许您生成可以托管的静态HTML文件,而无需在服务器上部署任何Python web应用程序。只要把生成的文件复制到你的主机上,你就可以开始了。

如果你还想打印一个HTML代码片段,你的代码应该像Ealhad在他的答案中发布的那样。

此外,原始代码还包含一些问题:

def pizzatoppings(self):
    # you don't need semicolons in Python
    toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce']
    # you need to initialize a "ul" variable
    ul = "<ul>"
    for s in toppings:
        ul += "<li>"+str(s)+"</li>"
    # following two lines where indented too much. In Python, indentation defines a block of code
    ul += "</ul>"
    return ul

你可以这样做:

def print_ul(elements):
    print("<ul>")
    for s in elements:
        ul = "<li>" + str(s) + "</li>"
        print(ul)
    print("</ul>")

toppings = ['mushrooms', 'peppers', 'pepparoni', 'steak', 'walnuts', 'goat cheese', 'eggplant', 'garlic sauce'];
print_ul(toppings)

原始代码有一些问题:

  • 你没有调用函数,所以难怪它什么也没做
  • 即使您这样做了,函数实际上也没有print任何内容,它只是返回了一些值
  • 这个函数并没有真正接受参数,所以它根本不可重用

一个更好的(IMO)解决方案是有一个生成HTML代码并打印结果的函数:

def ulify(elements):
    string = "<ul>\n"
    for s in elements:
        string += "<li>" + str(s) + "</li>\n"
    string += "</ul>"
    return string

print(ulify(['thing', 'other_thing']))

你也可以阅读list comprehensions。这样可以简化列表的处理:

def ulify(elements):
    string = "<ul>\n"
    string += "\n".join(["<li>" + str(s) + "</li>" for s in elements])
    string += "\n</ul>"

相关问题 更多 >