2017-12-08 18 views
0

私は達成したいことの説明から始めます。 基本的には、各項目がボタンのように見えるページに配列アイテムを表示したい場合は、クリックするとビュー(結果)にリダイレクトされ、引数(つまりそれ自体)が渡されます。Djangoは1つのビュー/ URLから別のURLにリダイレクトされません

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!') 

私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

あなたの現在のステータスは?何かエラーがありますか? – rajkris

+0

@rajkrisこのテンプレートの「試行錯誤」の後は、リダイレクトされませんが、その前にURLではなく「test2.html」ページにリダイレクトされます:/ – nexla

+0

両方のhtmlページを投稿できますか? test.htmlとtest2.html – rajkris

答えて

0

まず。スタイルの問題として、私はあなたのviews.pyでログインデコレータを使用することをお勧めします:

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

秒。 POSTメソッドを実行する場合は、HTMLファイルに宣言し、必要なcrsfトークンを追加する必要があります。

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

第3。なぜhref属性を持つ単純なリンクタグでは、指定されたオブジェクトで十分ではないでしょうか? urls.pyで

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

:あなたはどちらかでのHttpResponseまたはコンテキストでそれを渡すことができobjを次にご希望のオブジェクトが呼び出される

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

を:views.pyで

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

私はそれが助けてくれることを願っています!

+0

にリダイレクトされます。今正しいパス: – nexla

+0

urls.py:url(r '^ places/results /(?P [0-9] +)/ $'、views。results、name = 'results') views.py obj = 'object_name'.objects.get(pk = UserChoice)にあります。次に、目的のオブジェクトがobjと呼ばれ、HttpResponseまたはコンテキストで渡されます。 –

+1

ああああ、それは!!!!!ありがとう、トン! あなたの答えを更新するので、私はそれを受け入れる! – nexla

関連する問題