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

如何在Django视图中正确获取表单隐藏input字段的值

问题原因和解决方法

你获取不到page_url值通常是以下几个原因导致的,按优先级排查即可:

1. 优先修复HTML语法错误

你的表单代码存在两处语法问题,会导致浏览器解析DOM结构异常,把隐藏字段排除在表单之外,提交时自然不会携带该参数:

  • form标签多写了冗余的form属性
  • 表单内部出现了没有对应开标签的</div>,会打断DOM结构
    修正后的表单代码如下:
<form id="subscribe" method="POST">
    {% csrf_token %}
    <textarea id="first_name" name="first_name" rows="3"></textarea>
    <input type="hidden" id="page_url" name="page_url" value="{{ request.build_absolute_uri }}{{ object.get_absolute_url }}">
    <button type="submit" value="Subscribe" id="email_submit">Send</button>
</form>

2. 确认模板上下文配置正确

隐藏字段的value渲染为空的话,提交也会拿到空值或者None,需要检查两个配置:

  • 检查settings.py中的模板配置,确保已经注入了request全局变量:
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request', # 确保这行存在
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • 渲染当前表单页面的视图,必须把object实例传入模板上下文,示例如下:
# 渲染表单所在页面的视图,不是subscribe提交视图
def your_page_view(request):
    # 替换为你自己的模型查询逻辑
    object = YourModel.objects.get(pk=xxx)
    return render(request, '你的模板文件名.html', {'object': object})

3. 可选:明确指定表单提交地址

如果表单提交的路由和当前页面路由不一致,可以给form标签添加action属性明确指定提交地址,避免提交到错误路由:

<!-- 此处的subscribe要和你urls.py中给subscribe视图定义的路由name保持一致 -->
<form id="subscribe" method="POST" action="{% url 'subscribe' %}">

验证方法

修改完成后刷新页面,右键查看网页源代码,找到id为page_url的input标签,确认两点:

  • 该标签确实在<form></form>标签内部
  • value属性已经填充了完整的URL
    此时再提交表单,就可以在request.POST中正常拿到page_url的值。

内容的提问来源于stack exchange,提问作者multigoodverse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:57:05