如何在基本 HTML 页面上使用 Python 列出单词的段落

How to list a word's paragrams using Python on a basic HTML page

我正在使用 Flask 框架 创建一个简单的 python 网络应用程序来列出单词(段落)中一个字母或一系列字母的变化。控制台(IntelliJ 代码编辑器)成功打印出段落,但 我无法在无序 HTML 列表的 HTML 页面上打印 them/list 它们 - 请参阅以下 HTML 页面的屏幕截图

我尝试了 (''.join) 和 (','.join(str(e) for e in paragram_list)) 方法,但它们对我不起作用,如下面的代码所示。请看最后return声明 (return "There are " + str(num_of_paragrams) + " Paragrams for " + "''" + str(input_word) + "'\n'" +
" ... 在这里,我想要字符串格式或列表的格式:" + str(paragram_list[paragram]) +
" ----> 这仅显示一个更改 ----> " + str(''.join(values[paragram])))

我的代码编辑器的控制台打印了下面的行,我希望在 HTML

上打印同样的内容

这里是abc这个词的段落列表 美国广播公司 交流电 背 bca 出租车 cba

代码如下:

from itertools import permutations, count
from flask import Flask
from flask import request

app = Flask(__name__)


@app.route("/")
def index():
    html_form = """
        <html><body>
            <h1> Enter a word to find its paragrams.</h1>
            <h2> This is the alteration of a letter or a series of letters in a word. </h2>
            <br>
            <br>
            <form action="" method="GET">
            Text: <input type="text" name="Paragrams">
            <input type="submit" value="Find Paragrams">
                </form>
        </body></html>"""

    input_word = request.args.get("Paragrams", "")
    if input_word:
        wordsparagrams = str(find_paragram(input_word))
        # print(wordsparagrams)
    else:
        wordsparagrams = ""

    return html_form + wordsparagrams


def find_paragram(input_word):
    # input_word = input("Enter a word to find its paragrams\n")
    values = list(permutations(input_word, len(input_word)))
    print("Here is a list of the paragrams of the word " + input_word)
    count_of = 0
    paragram_list = []
    for paragram in range(len(values)):
        print(''.join(values[paragram]))
        # return ''.join(values[paragram])
        count_of += 1
        paragram_list.append(values)
        make_it_a_string = ','.join(str(e) for e in paragram_list)

    print("list items \n")
    print(paragram_list)
    print("make it a string: ", make_it_a_string)

    num_of_paragrams = count_of
    print("Paragrams of:", input_word, " = ", num_of_paragrams)
    return "There are " + str(num_of_paragrams) + " Paragrams for " + "'\'" + str(input_word) + "'\n'" + \
           " ... Here They Are I WANT THESE IN STRING FORMAT OR A LIST: " + str(paragram_list[paragram]) +\
           " ----> THIS SHOWS ONLY ONE alteration  ----> " + str(''.join(values[paragram]))


if __name__ == "__main__":
    app.run(host='127.0.0.1', port=8080, debug=True)

HTML 页面看起来:

代码结构:

templates
└───index.html
main.py

(我们需要创建模板文件夹,因为默认情况下 Flask 会搜索模板)

main.py:

import itertools
from flask import Flask, request, render_template

app = Flask(__name__)


def find_paragrams(word: str) -> list:
    '''Returns list of word paragrams'''

    # Get permutations as list of tuples of letters
    permutations = list(itertools.permutations(word, len(word)))

    # Join tuples inside of list
    permutations = [''.join(permutation_tuple)
                    for permutation_tuple in permutations]

    # Get rid of duplicates
    permutations = list(set(permutations))

    return permutations


@app.route("/", methods=['GET', 'POST'])
def index():
    # Default value in case if an empty sting was passed into form
    params = None
    
    # POST request on form submit
    if request.method == 'POST':
        # Get form data
        word = request.form['paragrams']

        paragrams_list = find_paragrams(word) if word else None
        if paragrams_list:
            paragrams_count = len(paragrams_list)
            paragrams_str = ', '.join(paragrams_list)

            # Packing parametes in dict just to be clean
            params = {
                'paragrams_count': paragrams_count,
                'word': word,
                'paragrams_str': paragrams_str,
                'paragrams_list': paragrams_list
            }

    # Render html template with jinja rendering parameters
    return render_template(
        'index.html',
        params=params,
    )


if __name__ == "__main__":
    app.run(host='127.0.0.1', port=8080, debug=True)

index.html:

<html>

<body>
    <h1> Enter a word to find its paragrams.</h1>
    <h2> This is the alteration of a letter or a series of letters in a word. </h2>
    <br>
    <br>
    <form action="" method="POST">
        Word: <input type="text" name="paragrams">
        <input type="submit" value="Find Paragrams">
    </form>
    <!-- Render inner html if params argument was not None -->
    {% if params %}
        <!-- Accessing params dict's values with params.key -->
        <p>There are {{ params.paragrams_count }} Paragrams for "{{ params.word }}"</p>
        <p>In string format:</p>
        {{ params.paragrams_str}}
        <p>In list format:</p>
        {{ params.paragrams_list }}
    {% else %}
        <!-- html to render if params argument was None -->
        <p>Empty field, enter word first!</p>
    {% endif %}
</body>

</html>

(有什么不明白可以随时联系我)