Django表单提交无响应 如何在原页面底部用表格打印字典内容
问题说明
开发Django框架的方言翻译程序,预期效果为点击提交按钮后,翻译结果直接展示在原页面底部。当前程序运行无报错,但点击提交后页面无响应,需以表格形式展示词典匹配结果,以下为核心文件修改方案。
问题根因
- 类视图写法不规范:
Postview类下的success方法缺少self参数,直接作为视图函数绑定路由时会出现参数错位,请求无法正常执行 - 模板跳转逻辑错误:提交后返回了不存在的
trans_suc.html模板,没有复用原表单页,无法实现同页展示结果 - 数据格式错误:pandas的
to_dict()默认返回列导向结构,模板无法直接遍历生成单条词条 - HTML语法错误:表格标签未闭合,遍历逻辑和变量名不匹配
- 资源加载浪费:每次请求都重复读取词典文件、初始化分词器,拖慢响应速度
逐文件修改方案
1. views.py 修改
调整类视图结构,将POST处理逻辑整合到类的标准post方法中,提前加载词典和分词器,修正数据转换格式,统一返回原表单模板:
import pandas as pd from konlpy.tag import Hannanum, Okt from django.views import View from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator # 服务启动时一次性加载词典和分词器,避免每次请求重复IO dict_df = pd.read_csv("C:\\Users\\user\\jeju-dialect-translation\\jeju\\dialect\\dict2.csv", sep=",", encoding='cp949') hannanum = Hannanum() okt = Okt() @method_decorator(csrf_exempt, name='dispatch') class Postview(View): def get(self, request): # GET请求返回空表单,初始化空结果列表 return render(request, 'dialect/trans_sub.html', {'results': []}) def post(self, request): content = request.POST.get('content', '').strip() results = [] if content: # 分词处理 nouns = hannanum.nouns(content) stem = okt.morphs(content, stem=True) # 过滤单字助词 single_char = [i for i in stem if len(i) == 1] adjective = list(set(stem) - set(single_char)) # 匹配词典 match_result = pd.DataFrame(columns={'siteName', 'contents'}) for noun in nouns: noun_match = dict_df[dict_df['siteName'] == noun][['siteName', 'contents']] match_result = pd.concat([match_result, noun_match], axis=0) for adj in adjective: adj_match = dict_df[dict_df['siteName'].str.match(adj, na=False)] match_result = pd.concat([match_result, adj_match], axis=0) # 去重后转为记录列表,方便模板遍历 results = match_result.drop_duplicates().to_dict(orient='records') # 返回原模板,实现结果同页展示 return render(request, 'dialect/trans_sub.html', { 'results': results, 'input_content': content }) # 保留原有dic方法的路由入口 def dic(self, request): # 原有词典页逻辑保持不变即可 pass
2. urls.py 修改
移除类视图非标准方法的直接绑定,统一走类视图的as_view()方法自动分发GET/POST请求:
from django.contrib import admin from django.urls import path from dialect import views urlpatterns = [ path('admin/', admin.site.urls), path('dialect/', views.Postview.as_view(), name='main_page'), # 提交路径统一走类视图分发 path('trans/', views.Postview.as_view(), name='trans_submit'), path('dictionary/', views.Postview.dic, name='dictionary') ]
3. trans_sub.html 修改
修正HTML语法,规范表格结构,调整变量遍历逻辑,增加空结果提示:
{% extends 'dialect/base.html' %} {% load static %} {% block content %} <div class="box"> <div class="container"> <form action="/trans/" method="post"> {% csrf_token %} <input id="trans" type="text" name="content" placeholder="0/500" value="{{ input_content }}"> <input class="btn" id="trans_btn" type="submit" value="번역"> </form> <!-- 结果展示区域 --> <div style="margin-top: 24px;"> {% if results %} <table border="1" cellpadding="10" cellspacing="0" style="width: 100%;"> <thead> <tr> <th>原方言词条</th> <th>标准语翻译</th> </tr> </thead> <tbody> {% for item in results %} <tr> <td>{{ item.siteName }}</td> <td>{{ item.contents }}</td> </tr> {% endfor %} </tbody> </table> {% else %} <p style="color: #666;">请输入需要翻译的济州岛方言内容,提交后翻译结果将展示在此处</p> {% endif %} </div> </div> </div> {% endblock content %}
验证说明
修改完成后重启Django服务,访问/trans/路径即可看到表单,输入内容提交后,匹配的词典结果会直接在表单下方以表格形式展示,不会跳转页面。
内容的提问来源于stack exchange,提问作者whgus613
相关产品推荐
相关产品推荐

