2016-11-03 16 views
1

ここではDjango noobは概念を理解していないので、StackOverflowからの同様の質問の助けを得ることはできません。ベストプラクティス/フォーム提出後にDjangoでリダイレクトするのに役立つ

私は1つのドロップダウンだけのフォームを持っています。サブミットを押すと、ドロップダウンの値を次のページに転送する必要があります。そのため、ドロップダウンに応じてコンテンツがカスタマイズされます。

どのようにリダイレクトするのですか?引数のある次のページへのポストの後にはどのようにリダイレクトされますか?

views.py

def appStart(request, institution): 
    #so something with institution 
    return render(request, 'application/SectionStart.html', {'content':{'if you would like to contact me emial','[email protected]'}}) 

def ReviewMyView(request): 
    form_class = ApplicationSelectInstituation 
    if request.method == 'POST': 
     form = form_class(data=request.POST) 
     if form.is_valid(): 
      for field, value in form.cleaned_data.items(): 
       return HttpResponseRedirect(reverse('appStart', args=(value,))) 
       #return HttpResponseRedirect(reverse('view_blog', args=(), kwargs={'institution': value})) 
       #return HttpResponseRedirect(reverse('appStart'), {'institution': value}) 
       #return HttpResponseRedirect(reverse('appStart'), institution=value) 

    return render(request, 'application/appmyreview.html', { 
     'form': form_class 
    }) 

urls.py

urlpatterns = [ 
url(r'^xxx/(?P<institution>\d+)$', appStart, name='appStart'), 
url(r'^myapp$', ReviewMyView, name='review'), 
] 

更新

が答えてくれてありがとう、と思いますか? "(リバースHttpResponseRedirect" を使用することさえ正しけれ私はそれを取得していないので、私はDjangoの基礎を読み返す必要があります

def my_awesome_django_view(request): 
    form_class = ApplicationSelectInstituation 

    if request.method == "POST": 
     form = ApplicationSelectInstituation(data=request.POST) 
     if form.is_valid(): 
      content_data = form.cleaned_data.get('institution_name').id 
      #Try 1 - page just refreshes 
      #redirect("nextapppage/"+str(content_data)) 
      #Try 2 - Reverse for 'next_view' with arguments '()' and keyword arguments '{'institution_id': 3}' not found. 0 pattern(s) tried: [] 
      #return HttpResponseRedirect(reverse('next_view',kwargs={'institution_id': content_data})) 
      #Try 3 - Reverse for 'next_view' with arguments '(3,)' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 
      return HttpResponseRedirect(reverse('next_view', args=[content_data])) 

    return render(request, 'application/appmyreview.html', { 
     'form': form_class 
    }) 

def the_next_view(request, *args, **kwargs): 
    print("I got to: the_next_view") 
    return render(request, 'application/SectionStart.html', {'content':{'if you would like to contact me emial','[email protected]'}}) 

urls.py

urlpatterns = [ 
url(r'^myapp$', my_awesome_django_view, name='myapp'), 
url(r'^nextapppage/(?P<institution_id>\d+)/$', the_next_view, name='the_next_view'), 
+0

'(逆( 'fooは'))'私はそれを行う方法であるHttpResponseRedirectを返します。 –

答えて

0

あなたは、おそらく逆に呼応してHttpResponseRedirectを使用する必要があります。

引数をargsと逆にすることができます。あなただけの正規表現で指定されたパラメータを使用していないだろうが、私はとても明快さと明示のためにという名前のパラメータを使用するのURLconfで

def the_next_view(request, *args, **kwargs): 
    content = content_getter(*args) 
    return HttpResponse(content) 

:だからあなたのビューで:次のビューで

def my_awesome_django_view(request): 
    # some get method stuff 
    if request.method == "POST": 
     form = MyForm(data=request.POST) 
     if form.is_valid(): 
      content_data = form.cleaned_data.get('my_field') 
      return HttpResponseRedirect(reverse('next_view', args=[content_data])) 

なぜあなたがこれを書いたかを理解しようとしている2ヶ月のうちに、あなたはパンくずみをいくつか与えることができます。ただ、完全を期すため

reverse('my_view_name', kwargs={'my_kwarg': value}) 

:あなたがちょうどそうようにそれを渡すkwargsからで

urlpatterns = [ 
    url(r'^xxx/(?P<institution>[\d]+)$', the_next_view, name='appStart'), 
    url(r'^myapp$', my_awesome_django_view, name='review'), 
] 

はまた、私はのURLconfに正規表現を変更してあることに注意してください。

0

class-based viewsとお考えですか?彼らは非常に使いやすいですが、基本機能のほとんどはすでにあなたのために作られており、直感的な名前と素晴らしいドキュメントが満載です。 urls.py

url(r'^myapp$', MyFormView.as_view(), name='review'), 
0

from django.views.generic.edit import FormView 

class MyFormView(FormView): 
    template_name = 'my_template.html' 
    form_class = MyForm 

    def form_valid(self, form): 
     # on successful form submit 
     self.next_url = reverse('appStart', args=[form.some_value]) 
     return super().form_valid(form) 

    def get_success_url(self): 
     return self.next_url 

ビューは、ショートカットredirectを使用しない理由は、その後、ブラウザへの応答を提供します別のビューにつながるする必要がある場合は?

次のビューに必要なパラメータはすべて渡すことができます。

関連する問題