为什么
<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
当然会导致网址不匹配错误。
似乎以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'answers.views.display_answers'Question.id,与其中任何一个都不匹配。
答案 0 :(得分:2)
这是对的。如果不是 - 您的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))
答案 1 :(得分:0)
问题是您在视图中使用redirect
。您应该使用render
或render_to_response
,除非您确实想要重定向浏览器。 (观察使用Fiddler,Firebug或Chrome的开发人员工具,你会发现它正在重定向。)
这不是问题的明显原因是因为redirect
可能会将URL作为其第一个参数。 'view_answers.html'
被解释为相对URL,可能会也可能不会映射到您的URLconf中的URL。如果它确实映射到URL,那么您会得到一个误报结果,一切看起来都有效,但如果您的Web服务器处理该链接而不是Django,那么它可能只是以纯文本形式发送模板页面。正如我所说,解决方案是render
或render_to_response
用于呈现页面,或redirect
具有视图名称或URL模式的特殊名称以重定向到不同的图。
答案 2 :(得分:0)
修改display_answers
视图中的重定向,以使用视图名称,而不是模板名称(view_answers.html
),并且不要将其传递给上下文({{3不将上下文作为参数):
return redirect('your_view_answers_view')