Django:href {%url%}问题

时间:2012-10-12 17:46:28

标签: python django python-2.7 django-views

为什么

<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,与其中任何一个都不匹配。

3 个答案:

答案 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。您应该使用renderrender_to_response,除非您确实想要重定向浏览器。 (观察使用Fiddler,Firebug或Chrome的开发人员工具,你会发现它正在重定向。)

这不是问题的明显原因是因为redirect可能会将URL作为其第一个参数。 'view_answers.html'被解释为相对URL,可能会也可能不会映射到您的URLconf中的URL。如果它确实映射到URL,那么您会得到一个误报结果,一切看起来都有效,但如果您的Web服务器处理该链接而不是Django,那么它可能只是以纯文本形式发送模板页面。正如我所说,解决方案是renderrender_to_response用于呈现页面,或redirect具有视图名称或URL模式的特殊名称以重定向到不同的图。

答案 2 :(得分:0)

修改display_answers视图中的重定向,以使用视图名称,而不是模板名称(view_answers.html),并且不要将其传递给上下文({{3不将上下文作为参数):

return redirect('your_view_answers_view')