django-麻煩,所以我試圖遵循Django的docs- https://docs.djangoproject.com/en/1.11/topics/class-based-views/mixins/#using-formmixin-with-detailview與混入
基本上我正在使用Django一個計算器克隆。 人們可以提出問題,這可以回答與答案
現在我可以使它工作,如果我提供一個鏈接,使他們到一個單獨的頁面提交他們的答案。但這很糟糕。我想要的答案形式是問題頁
基於我來到這個代碼
urls.py-的文檔上
url(r'^view/(?P<pk>\d+)/$',views.QuestionDetail.as_view(),name='detail'),
views.py-
class QuestionDetail(View):
def get(self, request, *args, **kwargs):
view = QuestionDisplay.as_view()
return view(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
view = Answer.as_view()
return view(request, *args, **kwargs)
哪(我相信)應該爲一個post請求提供一個視圖,並且爲一個get請求提供一個不同的視圖
class QuestionDisplay(generic.DetailView):
model = Question
template_name = 'questions/question_detail.html'
def get_context_data(self, **kwargs):
context = super(QuestionDisplay, self).get_context_data(**kwargs)
context['form'] = AnswerForm()
return context
^這部分工作正常
class Answer(SingleObjectMixin, FormView):
template_name = 'questions/question_detail.html'
form_class = AnswerForm
model = Answer
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden()
self.object = self.get_object()
return super(Answer, self).post(request, *args, **kwargs)
def get_success_url(self):
return reverse('questions:detail', kwargs={'pk': self.object.pk})
^問題(我想)當我試圖在所提供的網頁,我收到了404頁未找到錯誤的形式提交答辯。具體
沒有找到頁(404) 請求方法:POST 請求URL:http://127.0.0.1:8000/questions/view/8/ 提出者:questions.views.QuestionDetail
編輯,使得它與工作
class QuestionDetail(View):
def get(self, request, *args, **kwargs):
view = QuestionDisplay.as_view()
return view(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
pk = kwargs['pk']
view = add_answer_to_question(request, pk)
return redirect('questions:detail', pk=kwargs['pk'])
def add_answer_to_question(request, pk):
question = get_object_or_404(Question, pk=pk)
if request.method == "POST":
form = AnswerForm(request.POST)
if form.is_valid():
answer = form.save(commit=False)
answer.question = question
answer.user_id = request.user.id
answer.save()
return redirect('questions:detail', pk=question.pk)
else:
form = AnswerForm()
return render(request, 'answers/_answer_form.html', {'form': form})
nope同樣的問題: - /問題不在重定向中,問題在於頁面不會加載第一個帖子請求 –
是QuestionDetail中的post方法錯誤機智,我從來沒有看到有人寫這樣的重定向,你可以使用'HttpResponseRedirect'代替。 – Ykh
有一個像'view = Answer.as_view()返回視圖(request,* args,** kwargs)'這樣的測試,並且可以很好地工作。 – Ykh