Django在视图/页面之间形成和传递数据

时间:2015-03-18 07:41:13

标签: python django forms validation

我正在创建一个Web应用程序,主页是用户选择其位置的位置。主页模板的视图在我的数据库中查询位置列表并填充下拉列表。用户点击提交后,我验证表单数据,如果他们选择了一个有效的城市(即它存在于我的数据库中),我想将它们重定向到另一个显示该城市当天交易的页面。我的问题是基于Django的基本视图/表单设计。我怎样才能将城市传递到下一页?基本上我想做以下事情:

首页 - >提交表单 - >调用表单的调用方法 - >表单将用户重定向到另一个页面

我是否必须创建单独的验证视图/页面以进行验证?表单采用一个动作参数,所以我猜我必须将动作设置为/ validate /,这将调用我的validate_form()方法(通过urls.py文件),然后将它们重定向到适当的页面。

在我开始实施之前,我只是想让某人想到我的想法。谢谢你的时间。

1 个答案:

答案 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})