在另一个视图中使用一个视图中的数据

时间:2015-09-24 19:16:46

标签: django

我需要在另一个视图的一个视图中使用用户提交的数据。我不希望URL中的数据,并且无法通过调用最后创建的对象来提取数据,因为很多时候它不会是该对象。

我对索引的看法如下:

def index(request):

    template_name = 'index.html'

    if request.method  == 'POST':
        foo = request.POST['foo_text']
        Foo.objects.get_or_create(foo=foo)
        return redirect('/results/')

    return render(request, template_name, {})

此视图的模板是:

<html>
<title> Some Site </title>  
<h1> Some site </h1>

<form action="/results/" method="POST" > 
    <input type="text" name="foo_text" id="id_foo_lookup" placeholder="Enter Your Foo">
    {% csrf_token %}
</form>

处理数据结果的视图是:

def results_view(request, foo):

    template_name = 'movement_results.html'
    results = Results.objects.filter(foo=foo)

    return render(request, template_name, {'results' : results })

因此,您可以看到用户将在index.html中键入一些数据foo,如果数据库中尚不存在该对象,则会获取或创建该对象。由此结果视图将基于用户先前提交的数据返回结果。如何将foo数据导入下一个视图?

1 个答案:

答案 0 :(得分:1)

我认为您对应该提交表单的位置感到困惑。您编写了代码以接受POST中的index(),因此您绝对应该POSTindex()。您还将foo定义为results_view的参数,然后在重定向时,您无法简单地重定向到/results/,而是/results/<foo_id>

虽然您已正确实施了大部分常规流程,但我上面提到的许多细节都缺失了,所以请仔细阅读django手册。

这是我尝试解决你的困惑(未经测试):

索引方法:

def index(request):    
    template_name = 'index.html'
    if request.method  == 'POST':
        foo_text = request.POST['foo_text']
        foo, created = Foo.objects.get_or_create(foo=foo_text)
        return redirect('/results/%s' % foo.id)

    return render(request, template_name, {})

的index.html:

<html>
<title> Some Site </title>  
<h1> Some site </h1>

<form action="" method="POST" > 
    <input type="text" name="foo_text" id="id_foo_lookup" placeholder="Enter Your Foo">
    {% csrf_token %}
</form>

results_view方法:

from django.shortcuts import get_object_or_404

def results_view(request, foo_id):    
    template_name = 'movement_results.html'
    result = get_object_or_404(Result, pk=foo_id)

    return render(request, template_name, {'result' : result})