德夫的新尝试
我试图使一个项目,我总是有一些问题,我不知道为什么不工作。。。我把我的代码和解释
网址.py
app_name = 'opotest'
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/(?P<tipo>.+)/run/$',
views.TestDetail.as_view(), name='run'), # this one
视图.py
class TestDetail(generic.DetailView):
model = Pregunta
context_object_name = 'lista'
def get_queryset(self):
return Pregunta.objects.all()
HTML模板
{% for test in lista %}
<br/>
<p>Pregunta: {{ pregunta.textopregunta }}</p>
{% endfor %}
型号.py
class Pregunta(models.Model):
id = models.AutoField(primary_key=True)
textopregunta = models.CharField('Texto pregunta', max_length=1000)
test = models.ForeignKey(Test, on_delete=models.CASCADE)
def __str__(self):
return self.textopregunta
这个代码应该给我带来一些'pregunta',我已经创造了,但它不工作。。。你能告诉我我做错了什么吗?“给我带来”
Pregunta:
文本“Pregunta”不会出现。。。谢谢大家
D
默认情况下,Generic.DetailView在用于从数据库中搜索数据的url参数中查找
pk
。在本例中,您使用tipo
作为url参数。因此,需要覆盖视图中的默认值。您的代码应该是这样的:现在会的 在url中查找
tipo
,并从数据库中获取要搜索的参数。有关泛型视图的更多信息,请访问以下链接:https://ccbv.co.uk/projects/Django/1.10/django.views.generic.detail/DetailView/应该是
会有用的
但是无论如何,如果你想使用
Pregunta.objects.all()
,你必须使用ListView
,而不是DetailView
。像这样更新
如果要列出所有模型对象,请使用
ListView
1.将视图更改为
ListView
然后可以在tempalte中同时使用
objects
和lista
2.更改url
如果是listview,则不需要在url中使用
tipo
3.在模板中使用
objects
或lista
。因为您在
context_object_name
中定义了lista
:这意味着您的对象列表将与模板中的lista
一起使用(您可以使用objects
因为djangoListView
会自动为您创建上下文)更新DetailView
1.用pk
最重要的是,您必须了解
View
-Template
和urls
在你的网址-你应该传递参数你想用grep你的一个特定的对象。它应该是唯一的,所以只需使用
pk
(id)(或者你可以做你自己独特的鼻涕虫)那么您的url将是
test/1/
,test/2/
2.更改视图
实际上,django CBV支持许多函数(方法),因此您不必处理更多的函数,但很难理解
当你不知道
DetailView
的时候,你很困惑在
DetailView
(如您所见here-ccbv.co.kr)中,它有get_object()
方法。如果在视图中定义了任何url_kwargs
,那么它将pk
用作basic。所以它会发现从你的urls.py
中得到的Pregunta.objects.get(id=self.kwargs.get(pk))
然后可以在模板中使用对象,使用
lista
或object
你不必forloop所有的对象(实际上不能),因为
DetailView
基本上是从你的kwargs
找到你的对象(在这种情况下,pk
)我强烈建议阅读django文档(CBV)并查看ccbv.co.kr以了解CBV,或者尝试在django中使用FBV
尝试重写
get_context_data()
方法,如下所示,然后也更改模板,尝试按以下方式更改模板,
相关问题 更多 >
编程相关推荐