You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 00:27:19