1

トピックと質問と回答をつなぐサイトを構築しています。各質問はトピックに関連付けられており、各質問は質問に回答しています。ホームページでトピックをクリックすると、topic_id に基づく動的 URL に移動します。

url(r'^(?P<topic_id>\d+)/$', 'questions'),

質問を追加すると、jQuery ライトボックスがこの URL をポップアップで表示します

url(r'^(?P<topic_id>\d+)/add_question/$', 'add_question'),

質問を送信すると、add_question.html を通過します。

#add_question.html    
<div class="questionPopupForm">
    <h5><div class="questionPopupTitle"> Add Question</div></h5>
    <form action = "/home/{{ form.topic.id }}/add_question/" method = "post">{% csrf_token %}
        <p>{{ form.as_p }}</p>
        <p><div class="addQuestionButton"><input type = "submit" value = "Ask Question"     class="btn btn-success" /></div></p>
        <input type = "hidden" name = "next" value = "{{ next|escape }}" />
    </form>
</div>

送信すると、アクションによって /home/{{ form.topic.id }}/add_question に移動します。これは上記の URL であり、add_question ビューにリンクしています。

#views.py
def add_question(request, topic_id):
    if request.method == "POST":
        form = QuestionForm(request.POST, request.FILES)
        if form.is_valid():
            question = form.save(user = request.user)
            question.topic = Topic.objects.get(pk = topic_id)
            question.save()
            return HttpResponseRedirect("/home/")
    else:
        form = QuestionForm()
        form.q_author = request.user
        form.movie = Topic.objects.get(pk = topic_id)
    return render_to_response("qanda/add_question.html", {'form': form}, context_instance = RequestContext(request))

今、リターン HttpResponeRedirect('/home/') で私を家に連れて帰ります。私がやりたいのは、ユーザーを同じページにリダイレクトすることですが、URL (/{{ topic.id }}/) に変数がありますが、HttpResponseRedirect では変数を入れることができません。どうすれば同じページに戻ることができますか?

4

3 に答える 3

2

HttpResponseRedirect には文字列 (この場合は URL) が必要ですが、その場で作成できます。例えば:

return HttpResponseRedirect("/%s/" % topic.id)
于 2012-11-02T22:21:07.657 に答える
2

はい、変数を に入れることができますが、次HttpResponseRedirectのように文字列として指定します。

return HttpResponseRedirect("/%s/" % topic_id)

また、リバースを使用して url エイリアスを使用してみてください。

return HttpResponseRedirect(reverse('questions', topic_id=topic_id))

または Django ショートカットredirect():

from django.shortcuts import redirect
return redirect('questions', topic_id=topic_id)
于 2012-11-02T22:22:16.183 に答える
1

これを試していただけますか?

#views.py
def add_question(request, topic_id):
    if request.method == "POST":
        form = QuestionForm(request.POST, request.FILES)
        if form.is_valid():
            question = form.save(user = request.user)
            question.topic = Topic.objects.get(pk = topic_id)
            question.save()
            url = "/home/%s"%(str(topic_id))
            return HttpResponseRedirect(url)
    else:
        form = QuestionForm()
        form.q_author = request.user
        form.movie = Topic.objects.get(pk = topic_id)
    return render_to_response("qanda/add_question.html", {'form': form}, context_instance = RequestContext(request))
于 2012-11-02T22:25:38.740 に答える