Должно быть
{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
будет работать,
но в любом случае, если вы хотите использовать Pregunta.objects.all()
, вы должны использовать ListView
, а не DetailView
. Как это
class TestList(generic.ListView):
model = Pregunta
context_object_name = 'lista'
{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
UPDATE
Если вы хотите перечислить все ваши объекты модели, пожалуйста, используйте ListView
.
1. Измените ваше мнение на ListView
class TestList(generic.ListView):
model = Pregunta
context_object_name = 'lista'
Тогда вы можете использовать objects
и lista
как в tempalte.
2. Измени свой URL
Вам не нужно tipo
в URL, если это просмотр списка.
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
3. используйте objects
или lista
в шаблонах.
Поскольку вы определяете lista
в context_object_name
: это означает, что ваш список объектов будет использоваться с lista
в шаблоне. (вы можете использовать objects
, потому что django ListView
автоматически создаст для вас контекст)
{% for test in lista %}
<br/>
<p>Pregunta: {{ test.textopregunta }}</p>
{% endfor %}
ОБНОВЛЕНИЕ для DetailView
1. Измените URL с помощью pk
Прежде всего, вы должны понимать о View
- Template
и urls
.
В ваших URL - вы должны передавать params то, что вы хотите использовать для поиска вашего конкретного объекта. Он должен быть уникальным, поэтому просто используйте pk
(id). (Или вы можете сделать свой собственный уникальный слаг)
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
Тогда ваш URL будет .. test/1/
, test/2/
.
2. изменить представление
На самом деле, django CBV поддерживает множество функций (методов), поэтому вам не нужно больше обрабатывать, но это трудно понять.
class TestDetail(generic.DetailView):
model = Pregunta
context_object_name = 'lista'
Вы путаетесь, когда не знаете о DetailView
.
В DetailView
(как вы можете видеть здесь-ccbv.co.kr ) он имеет метод get_object()
. Если какой-либо url_kwargs
определен на ваш взгляд, он использует pk
для основного. Таким образом, он найдет как Pregunta.objects.get(id=self.kwargs.get(pk))
, что берет от вашего urls.py
.
Затем вы можете использовать свой объект в шаблоне, используя lista
или object
.
<br/>
<p>Pregunta: {{ lista.textopregunta }}</p>
Вы НЕ ДОЛЖНЫ блокировать все объекты (на самом деле CANT), потому что DetailView
в основном находит ваш объект из вашего kwargs
(в этой ситуации pk
).
Я настоятельно рекомендую прочитать django docs (CBV) и посмотреть ccbv.co.kr для понимания CBV или попробовать использовать FBV в django.