如何使用Python向HTML返回字符串并在页面以段落形式展示
问题分析与解决方案
你的代码存在几个核心问题:浏览器无法识别<script type="python">里的后端代码,Python语法错误(用了&&而非and),且未实现后端向前端传递字符串的逻辑。下面用Django框架(贴合你代码里的render和request用法)给出完整可运行的实现:
1. 后端视图代码(views.py)
将Python逻辑放到Django的视图文件中,不要写在HTML内:
from django.shortcuts import render def test_view(request): # 初始化要返回的消息 response_msg = "" if request.method == 'POST': # 判断哪个按钮被点击 if 'attack' in request.POST: response_msg = "你发起了攻击/拾取动作!" elif 'forward' in request.POST: response_msg = "你向前移动了一步!" elif 'run' in request.POST: response_msg = "你开始奔跑!" elif 'left' in request.POST: response_msg = "你向左转向!" elif 'backward' in request.POST: response_msg = "你向后移动!" elif 'right' in request.POST: response_msg = "你向右转向!" # 将消息传递给HTML模板 return render(request, '1st.html', {'response_msg': response_msg})
2. HTML模板代码(1st.html)
添加<p>标签显示后端返回的字符串,同时修复Django要求的CSRF验证问题:
<!DOCTYPE html> <html> <head> <title>PythonGame.html</title> </head> <body> <!-- 显示后端返回的字符串 --> <p>{{ response_msg }}</p> <table border="1"> <tr> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="attack" value="attack">attack/pickup</button> </form> </th> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="forward" value="forward"> forward </button> </form> </th> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="run" value="run"> run </button> </form> </th> </tr> <tr> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="left" value="left"> left </button> </form> </th> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="backward" value="backward"> backward </button> </form> </th> <th> <form action="" method="post"> {% csrf_token %} <button class="btn" type="submit" name="right" value="right"> right </button> </form> </th> </tr> </table> </body> </html>
关键修复说明
- 后端代码独立存放:Python后端逻辑必须放在Web框架的视图文件中,浏览器无法直接执行Python代码。
- 语法修正:把
&&改成Python的and,同时用in request.POST判断按钮是否提交(避免键不存在报错)。 - 上下文变量传递:通过
render的第三个参数把response_msg传递给模板,前端用{{ response_msg }}渲染内容。 - CSRF令牌:Django要求POST表单必须包含
{% csrf_token %},否则会拒绝请求。
若使用Flask框架,逻辑类似:后端通过render_template传递变量,前端用{{ 变量名 }}渲染,表单无需CSRF令牌(除非手动配置)。
内容的提问来源于stack exchange,提问作者Kyle_3_1415
相关产品推荐
相关产品推荐

