4

なぜ

<a href="{% url 'answers.views.display_answers' Question.id %}">View answers</a>

私のテンプレートでは、Django によるこの解釈に変換されます。

Request URL:    http://127.0.0.1:8000/questions/%7B%%20url%20'answers.views.display_answers'%20Question.id

もちろん、これはURLの不一致エラーにつながります。

私の「{」をASCII形式で読んでいるようです。なぜそうなのか、誰かが私に教えてもらえますか?

編集:

これが私がテンプレートをレンダリングした方法でした--

return render(request, 'display_questions.html', context) 

テンプレートには href が含まれています。私の表示回答ビューは、次のように別のビューにリダイレクトされます。

def display_answers(request, q_id): 
        q = get_object_or_404(Question, id=q_id) 
        ans_list = Answer.objects.filter(question=q) 
        context = {'question': q, 'ans_list': ans_list} 
        return redirect('view_answers.html', context)

エラー:

現在の URL、questions/{% url 'answers.views.display_answers' Question.id は、これらのいずれとも一致しませんでした。

4

3 に答える 3

3

正解です。そうでない場合 - あなたurls.pyは間違っているようです。投稿してください。

<a href="{% url answers.views.display_answers question.id %}">View answers</a>

編集 これはあなたのビューのより良いバージョンです。

from django.template import RequestContext
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, redirect, get_object_or_404

def display_answers(request, q_id): 
    q = get_object_or_404(Question, id=q_id) 
    ans_list = Answer.objects.filter(question=q) 
    context = {'question': q, 'ans_list': ans_list} 
    return render_to_response('view_answers.html', context, RequestContext(request))
于 2012-10-12T18:38:42.973 に答える
0

問題はredirect、ビューでの使用です。ブラウザを実際にリダイレクトする場合を除いて、renderを使用する必要があります。render_to_response(Fiddler、Firebug、またはChromeの開発者ツールを使用して観察すると、リダイレクトされていることがわかります。)

これが問題としてそれほど明白ではない理由はredirect、最初の引数としてURLを使用する可能性があるためです。'view_answers.html'は相対URLとして解釈されており、URLconf内のURLにマップされる場合とされない場合があります。URLにマップされている場合は、すべてが機能しているように見えるという誤検知の結果が得られますが、WebサーバーがDjangoではなくそのリンクを処理している場合は、テンプレートページがプレーンテキストで返送される可能性があります。解決策は、私が言ったように、ページをレンダリングするため、またはrenderビューの名前または別のビューにリダイレクトするためのURLパターンの特別な名前を使用することです。render_to_responseredirect

于 2012-10-12T19:05:02.140 に答える
0

display_answersテンプレートの名前()の代わりにビューの名前を使用するようにビューのリダイレクトを変更view_answers.htmlし、コンテキストを渡さないでください(redirectコンテキストをパラメーターとして使用しません)。

return redirect('your_view_answers_view')
于 2012-10-12T19:05:16.820 に答える