Django不会从一个视图/网址重定向到另一个视图/网址

时间:2017-12-08 14:57:02

标签: python django templates

我将首先解释我想要实现的目标。 基本上我想在我的视图(prefs)中显示页面上的数组项,每个项看起来像按钮,如果点击它重定向到视图(结果)并传递参数(即自身)

我的views.py看起来像这样

def prefs(request):
    if request.method == 'POST':
        for i in user_queryset(request): #this function returns an array
            if i in request.POST.values():
                    return redirect(reverse('results',kwargs={'UserChoice':i}))
    elif not request.user.is_authenticated():
        return HttpResponse('Please login or sign-up to use this feature')
    else:
        uid = request.user
        return render(request,'test.html',{'form':user_queryset(request,uid)})

def results(request,UserChoice):
        if request.method =='GET':
            return render(request,'test2.html',{'objects':request_places(request,UserChoice)}) #another function that I need to use the arguments in
        else:
            return HttpResponse('Hello, World!')

my urls.py

url(r'places/$',views.prefs,name='prefs'),
url(r'^places/results/(?P<UserChoice>[^\/]*)/$', views.results, name='results')

和我的模板

的test.html

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<ul>
    <li>
            <form action="" >
                        {% for obj in  form %}
     <!--<input type="text" name="{{ obj }} ">-->
            <input type="submit" value="{{ obj }}">
            </form>
    </li>
    {% endfor %}
</ul>
</body>
</html>
    </ul>

和test2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello, World!</title>
    <li>
        {% for items in objects %}
        <h>{{ items.name }} - {{ items.formatted_address }}</h>
     </li>
    {% endfor %}
</head>
<body>

</body>
</html>

1 个答案:

答案 0 :(得分:0)

首先。作为一种风格问题,我建议您在views.py中使用登录装饰器:

from django.contrib.auth.decorators import login_required
@login_required

二。如果您的目标是执行POST方法,则应在HTML文件中声明它,并添加所需的crsf标记。

<form method="POST">{% csrf_token %}

第三。为什么带有href属性的简单链接标记不足以满足任何给定对象的需要?

<a href="results/{{obj.pk}}/">{{obj}}</a>

在urls.py中:

urls.py: url(r'^places/results/(?P<UserChoice>[0-9]+)/$', views.results, name='results')

在views.py中:

obj='object_name'.objects.get(pk=UserChoice)

然后你想要的对象被称为obj你可以在HttpResponse或上下文中传递它

我希望它有所帮助!