我将首先解释我想要实现的目标。 基本上我想在我的视图(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>
答案 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或上下文中传递它
我希望它有所帮助!