我正在创建一个Web应用程序,主页是用户选择其位置的位置。主页模板的视图在我的数据库中查询位置列表并填充下拉列表。用户点击提交后,我验证表单数据,如果他们选择了一个有效的城市(即它存在于我的数据库中),我想将它们重定向到另一个显示该城市当天交易的页面。我的问题是基于Django的基本视图/表单设计。我怎样才能将城市传递到下一页?基本上我想做以下事情:
首页 - >提交表单 - >调用表单的调用方法 - >表单将用户重定向到另一个页面
我是否必须创建单独的验证视图/页面以进行验证?表单采用一个动作参数,所以我猜我必须将动作设置为/ validate /,这将调用我的validate_form()方法(通过urls.py文件),然后将它们重定向到适当的页面。
在我开始实施之前,我只是想让某人想到我的想法。谢谢你的时间。
答案 0 :(得分:3)
为什么要验证这个城市?只需重定向到城市,如果城市不存在,则会显示404页面。
您的模板
<form action="{% url 'choose_city' %}" method="POST">
<select name="city">
{% for city in cities %}
<option value="{{ city.id }}">{{ city.name }}</option>
{% endfor %}
</select>
<button>Show deals</button>
</form>
<强> urls.py 强>
url(r'^choose/$', views.choose_city, name='choose_city'),
url(r'^deals/(?P<city_id>\d+)/$', views.deals_by_city, name='deals_by_city'),
<强> views.py 强>
from django.shortcuts import get_object_or_404, redirect, render
def choose_city(request):
return redirect('deals_by_city', city_id=request.POST['city'])
def deals_by_city(request, city_id):
city = get_object_or_404(City, pk=city_id)
deals = Deal.objects.filter(city=city)
return render(request, 'deals_by_city.html', {'city': city,
'deals': deals})