【发布时间】:2015-01-20 23:10:55
【问题描述】:
我目前正在阅读 Django 的官方教程,但在尝试理解通用视图的实际工作原理时遇到了麻烦。
来自官方文档的源码:
class DetailView(generic.DetailView):
model = Question
template_name = 'polls/detail.html'
class ResultsView(generic.DetailView):
model = Question
template_name = 'polls/results.html'
detail.html
<h1>{{ question.question_text }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'polls:vote' question.id %}" method="post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type="radio" name="choice" id="choice{{ forloop.counter }}" value="{{ choice.id }}" />
<label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br />
{% endfor %}
<input type="submit" value="Vote" />
</form>
结果.html
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li>
{% endfor %}
</ul>
<a href="{% url 'polls:detail' question.id %}">Vote again?</a>
现在,我了解到 ListView 和 DetailView 是 Django 提供的默认通用视图。
DetailView 和ResultsView 如何在detail.html 和result.html 中生成question 上下文变量?另外,DetailView 生成的detail.html 中的error_message 上下文变量是如何产生的?
【问题讨论】:
标签: python django django-1.7