2017-08-27 10 views
0

私はDjangoチュートリアルを見てWebサイトを作っています。 私は投票ボタンを入れたときに、私は負荷results.htmlをしたいがdetail.htmlであるが、今loaded.detail.htmlは、私がしたい index.htmlを私は投票ボタンは、このコード<input type="submit" value="Vote" />で置くとき投票ボタンを押したときにresults.htmlをロードしたい

{% extends "polls/base.html" %} 
{% load bootstrap3 %} 
{% block contents %} 

<h1>{{ question.question_text }}</h1> 
<!--{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}--> 

<form action="{% url 'polls:poll_vote' question.id %}" method="post"> 
    {% csrf_token %} 
    {% bootstrap_form form %} 
    <input type="submit" value="Vote" /> 
</form> 
{% endblock %} 

されていますresults.htmlを表示します。 views.pyはそうreturn redirect('poll_results', pk)は読みもあるとresults.htmlがある、私はdef vote(request,pk)読まれると思う

from django.shortcuts import render 
from django.urls import reverse_lazy 
from django.utils.html import mark_safe 
from .models import Question 
from django.http import HttpResponse 
from django.shortcuts import Http404 
from django.shortcuts import get_object_or_404,redirect 
from .models import Choice 
from django.views.generic import TemplateView 
from django.views.generic import DetailView 
from django.views.generic import ListView 
from .forms import MyForm 
from .forms import VoteForm 
from django.views.generic import FormView 
from django.views.generic.detail import SingleObjectMixin 
from django.shortcuts import resolve_url 
from django.contrib import messages 



# Create your views here. 
def index(request): 
    return render(request,'polls/index.html',{ 
     'questions': Question.objects.all(), 
    }) 


def vote(request,pk): 
    question = get_object_or_404(Question,pk=pk) 
    try: 
     selected_choice = question.choice_set.get(pk=request.POST['choice']) 
    except (KeyError,Choice.DoesNotExist): 
     return render(request,'poll/detail.html',{ 
      'question':question, 
      'error_message':"You didn't select a choice", 
     }) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
     return redirect('index') 
    return redirect('poll_results', pk) 
    # pass 

def results(request,pk): 
    obj = get_object_or_404(Question,pk=pk) 
    return render(request,'polls/results.html',{ 
     'question':obj, 
    }) 

class FormTest(FormView): 
    form_class = MyForm 
    template_name = 'polls/form.html' 
    success_url = reverse_lazy('polls:index') 
form_test = FormTest.as_view() 

class Detail(SingleObjectMixin,FormView): 
    model = Question 
    form_class = VoteForm 
    context_object_name = 'question' 
    template_name = 'polls/detail.html' 

    def get(self, request, *args, **kwargs): 
     self.object = self.get_object() 
     return super().post(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     self.object = self.get_object() 
     return super().post(request, *args, **kwargs) 

    def get_form_kwargs(self): 
     kwargs = super().get_form_kwargs() 
     kwargs['question'] = self.object 
     return kwargs 

    def form_valid(self, form): 
     form.vote() 
     choice = form.cleaned_data['choice'] 
     messages.success(self.request,'"%s"に投票しました' % choice) 
     return super().form_valid(form) 

    def get_success_url(self): 
     return resolve_url('polls:results',self.kwargs['pk']) 

detail = Detail.as_view() 

あるload.But私の理想的な流れはrealized.Wasは私が間違ったディレクトリを書くことではないでしょうか? ディレクトリは directory

どのように修正できますか? return redirect('polls_results', pk)が機能しませんでした。

今私は1つの答えを受け、views.pyで 投票方法は

def vote(request,pk): 
    question = get_object_or_404(Question,pk=pk) 
    try: 
     selected_choice = question.choice_set.get(pk=request.POST['choice']) 
    except (KeyError,Choice.DoesNotExist): 
     return render(request,'poll/detail.html',{ 
      'question':question, 
      'error_message':"You didn't select a choice", 
     }) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
     return redirect('index') 
    return redirect(reverse('polls_results'), pk=pk) 

ですが、同じエラーが発生します。世論調査で urls.pyは

from django.conf.urls import url 
from django.views.generic import TemplateView 
from . import views 

app_name="polls" 
urlpatterns = [ 
    url(r'(?P<pk>\d+)/$', views.detail, name='poll_detail'), 
    url(r'(?P<pk>\d+)/vote$', views.vote, name='poll_vote'), 
    url(r'(?P<pk>\d+)/results$', views.results, name='poll_results'), 
    url(r'^$',views.index,name='index'), 
    url(r'^form$', views.form_test), 
] 
+0

[mcve]を作成してください。ここで何が間違っているかは分かりません。 'urls.py'をインクルードする必要があります。また、関係のないビュー関数は含めないでください。 –

+0

@HåkenLid申し訳ありませんが、私は何かを知っている場合は私に教えてください私のurls.pyを含める。 – user8504021

+0

また、エラートレースバックを投稿してください。それがうまくいかないと言っても、問題を特定するのには役立たないようです。 –

答えて

0

あなたがnamespaced urlsを使用しているようです。

この場合、reverse,redirectまたは{% url %}を使用するときは常に名前空間接頭辞を使用する必要があります。

return redirect('polls:polls_results', pk=pk) 
+0

私はリターンリダイレクト(reverse( 'polls:poll_results')、pk = pk)を書きましたが、/ polls/1/voteでNoReverseMatchを返しました 'poll_results'を引数なしで取り消します。 1つのパターンが試されました:['polls /(?P \\ d +)/ results $']エラーが発生します。 – user8504021

+0

returnリダイレクト( 'polls:polls_results' pk = pk)を使用すると、構文エラーが発生します。 – user8504021

+0

どうすればいいですか? – user8504021

0

使用reverseまたはredirect方法で正しいパスを記述しています。

from django.urls import reverse 

def the_view(request): 
    # change here 
    return redirect(reverse('poll_results'), pk=pk) 
    # or 
    return redirect('results_url', pk=pk) 

EDIT:あなたのurlpatternsに基づいて、あなたがpoll_resultsのようにそれを定義したようreverse方法、polls_results、で間違った名前を渡しているようです。

voteのコードのelseの部分にredirectからindexの文を削除していません。

def vote(request, pk): 
    # your code 
    else: 
     # save to model 
     # remove redirect statement here 
    return redirect(reverse('poll_results'), pk=pk) 

参考:https://docs.djangoproject.com/en/1.11/ref/urlresolvers/#reverse

+0

私は私の質問を更新しました。もし私がurの答えを誤解していたら、教えてください。 – user8504021

+0

私の答えを更新しました。 –

+0

私はurコードを試しましたが、それでもindex.htmlが表示されています...どうすればいいですか? – user8504021

関連する問題