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

Django中如何通过GET方式以查询参数传递表单值至下一视图

解决方案

要实现带查询参数的URL跳转,你需要调整三个核心部分:URL配置、表单类写法,以及视图里的重定向逻辑,具体步骤如下:

1. 修正URL配置

你当前的search_results路径是基于路径参数设计的,但查询参数(?country=USA&city=new-york)不需要在URL模式里提前定义。修改urls.py如下:

from django.urls import path
from . import views
urlpatterns = [
    path('', views.search, name='search'),
    # 移除路径参数,改为普通的结果页路径
    path('search-results/', views.search_results, name='search_results'),
]

2. 修复表单类的写法

你的SearchForm存在写法错误——应该继承Django的forms.Form类,而非直接使用models模块的字段。正确的表单定义如下:

from django import forms

# 假设你已提前定义好选项元组
COUNTRY = (('USA', 'USA'), ('CA', 'Canada'))
CITY = (('new-york', 'New York'), ('toronto', 'Toronto'))

class SearchForm(forms.Form):
    country = forms.ChoiceField(choices=COUNTRY)
    city = forms.ChoiceField(choices=CITY)

3. 修改重定向逻辑,拼接查询参数

在search视图里,args是用来传递路径参数的,要生成查询参数,需要先拿到基础URL,再手动拼接参数串:

from django.urls import reverse
from django.http import HttpResponseRedirect

def search(request):
    if request.method == 'GET' and 'search' in request.GET:
        form = SearchForm(request.GET)
        if form.is_valid():
            # 从表单的清洗后数据中取值
            country = form.cleaned_data['country']
            city = form.cleaned_data['city']
            # 获取结果页的基础URL
            base_url = reverse('app:search_results')
            # 拼接查询参数
            query_string = f'?country={country}&city={city}'
            return HttpResponseRedirect(base_url + query_string)
    else:
        form = SearchForm()
    context = {'form': form}
    return render(request, 'search.html', context)

4. 在结果页视图中获取查询参数

最后,在search_results视图里,你可以通过request.GET.get()来读取这些查询参数:

def search_results(request):
    country = request.GET.get('country')
    city = request.GET.get('city')
    # 这里添加你的业务逻辑,比如根据参数查询数据
    context = {'country': country, 'city': city}
    return render(request, 'search_results.html', context)

调整完成后,跳转后的URL就会变成你期望的http://127.0.0.1:8000/search-results/?country=USA&city=new-york,和主流网站的搜索结果URL格式一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:14