<p>应该是</p>
<pre><code>{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
</code></pre>
<p>会有用的</p>
<p>但是无论如何,如果你想使用<code>Pregunta.objects.all()</code>,你必须使用<code>ListView</code>,而不是<code>DetailView</code>。像这样</p>
<pre><code>class TestList(generic.ListView):
model = Pregunta
context_object_name = 'lista'
{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
</code></pre>
<h3>更新</h3>
<p>如果要列出所有模型对象,请使用<code>ListView</code></p>
<h3>1.将视图更改为<code>ListView</code></h3>
<pre><code>class TestList(generic.ListView):
model = Pregunta
context_object_name = 'lista'
</code></pre>
<p>然后可以在tempalte中同时使用<code>objects</code>和<code>lista</code></p>
<h3>2.更改url</h3>
<p>如果是listview,则不需要在url中使用<code>tipo</code></p>
<pre><code>urlpatterns = [
url(r'^$', views.indexView, name='index'),
url(r'^inicio/$', views.ListaView.as_view(), name='inicio'),
url(r'^test/(?P<tipo>.+)/$', views.TestList.as_view(), name='test'),
url(r'^test/run/$',
views.TestList.as_view(), name='run'), # this one
</code></pre>
<h3>3.在模板中使用<code>objects</code>或<code>lista</code>。</h3>
<p>因为您在<code>context_object_name</code>中定义了<code>lista</code>:这意味着您的对象列表将与模板中的<code>lista</code>一起使用(您可以使用<code>objects</code>因为django <code>ListView</code>会自动为您创建上下文)</p>
<pre><code>{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
</code></pre>
<h3>更新DetailView</h3>
<h3>1.用pk</h3>
<p>最重要的是,您必须了解<code>View</code>-<code>Template</code>和<code>urls</code></p>
<p>在你的网址-你应该传递参数你想用grep你的一个特定的对象。它应该是唯一的,所以只需使用<code>pk</code>(id)(或者你可以做你自己独特的鼻涕虫)</p>
<pre><code> url(r'^test/run/$',
views.TestList.as_view(), name='run'), # this one
# this is DetailView
url(r'^test/(?P<pk>\d+)/$',
views.TestDetail.as_view(), name='run'), # this one
</code></pre>
<p>那么您的url将是<code>test/1/</code>,<code>test/2/</code></p>
<h3>2.更改视图</h3>
<p>实际上,django CBV支持许多函数(方法),因此您不必处理更多的函数,但很难理解</p>
<pre><code>class TestDetail(generic.DetailView):
model = Pregunta
context_object_name = 'lista'
</code></pre>
<p>当你不知道<code>DetailView</code>的时候,你很困惑</p>
<p>在<code>DetailView</code>(如您所见<a href="https://ccbv.co.uk/projects/Django/2.0/django.views.generic.detail/DetailView/" rel="nofollow noreferrer">here-ccbv.co.kr</a>)中,它有<code>get_object()</code>方法。如果在视图中定义了任何<code>url_kwargs</code>,那么它将<code>pk</code>用作basic。所以它会发现从你的<code>urls.py</code>中得到的<code>Pregunta.objects.get(id=self.kwargs.get(pk))</code></p>
<p>然后可以在模板中使用对象,使用<code>lista</code>或<code>object</code></p>
<pre><code> <br/>
<p>Pregunta: {{ lista.textopregunta }}</p>
</code></pre>
<p>你不必forloop所有的对象(实际上不能),因为<code>DetailView</code>基本上是从你的<code>kwargs</code>找到你的对象(在这种情况下,<code>pk</code>)</p>
<p>我强烈建议阅读django文档(CBV)并查看<a href="https://ccbv.co.uk/projects/Django/2.0/django.views.generic.detail/DetailView/" rel="nofollow noreferrer">ccbv.co.kr</a>以了解CBV,或者尝试在django中使用FBV</p>