基于 Django class 的视图如何知道哪个上下文意味着什么
how does django class based views know which context means what
假设我有一个博客模型:
#models.py
class Blog(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
在视图中我有一个基于 class 的视图:
#views.py
class BlogDetailView(DetailView):
model = Blog
我将该观点称为:
urlpatterns = [
path('post/<int:pk>/', BlogDetailView.as_view(), name='blog-detail'),
现在 django DetailView 接受上下文变量名称为 'object'。所以在 html 中,我做了类似的事情:
<<! blog_detail.html -->
<p>{{ object.content }}</p>
现在,如果我去喜欢 localhost:8000/post/1 ;呈现我使用 manage.py shell 手动创建的内容,这些是特定博客的特定内容。
现在,我的问题是,django 如何知道 'object' 明确表示 'a' 离散博客?
像这里一样,我只引用 url 中的主键。就像 django 从 url 中获取主键,然后将该主键作为上下文传递,然后当我引用 'object.content' 时,django 从模型 Blog 中获取主键为 1 的对象,然后显示实际内容?是喜欢还是别的?我真的无法理解。任何关于它是如何发生的详细解释的帮助都会很有帮助。
Now, my question is, how does django know that 'object' explicitly means 'a' discrete blog? Like here I am only referring that primary key in url. So is it like django grabs that primary key from url
是的。
and then passes that primary key as context and then when I refer 'object.content' then django grabs the object
没有。 url 解析器从 url 中提取 pk 值并将其传递给 DetailView.get()
。然后 DetailView.get()
检索匹配的模型实例并将其传递给模板,名称为 "object".
现在 Klaus D. 提到,Django 是 OSS,因此您只需阅读代码即可了解 womething 的真正工作原理(如果 - 相当广泛的 - 文档尚未回答您的问题);-)
您可以在关于 DetailView 的 Django 文档中看到 DetailView 的控制流。
如果您查看视图的声明,您已经指定了要在其上创建查询的模型。
从链接的文档中,get_object
方法将使用 URL 中指定的 id/pk
获取对象。
然后通过 get_context_data
方法将对象添加到上下文中。 .content
method/property 也在 model object
的基础 类 之一中定义,它为 [=15] 上定义的属性提供 HTML 表示=] 你在模板中看到的。
希望这能给出有关流程的解释。但是,您应该阅读文档并使用调试器来理解视图的流程,而不是在这里问这样的问题。 :)
@dirkgroten 的评论还链接到一个非常好的站点,该站点与 Django 的视图和方法有关。 ccbv.co.uk
假设我有一个博客模型:
#models.py
class Blog(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
def __str__(self):
return self.title
在视图中我有一个基于 class 的视图:
#views.py
class BlogDetailView(DetailView):
model = Blog
我将该观点称为:
urlpatterns = [
path('post/<int:pk>/', BlogDetailView.as_view(), name='blog-detail'),
现在 django DetailView 接受上下文变量名称为 'object'。所以在 html 中,我做了类似的事情:
<<! blog_detail.html -->
<p>{{ object.content }}</p>
现在,如果我去喜欢 localhost:8000/post/1 ;呈现我使用 manage.py shell 手动创建的内容,这些是特定博客的特定内容。
现在,我的问题是,django 如何知道 'object' 明确表示 'a' 离散博客? 像这里一样,我只引用 url 中的主键。就像 django 从 url 中获取主键,然后将该主键作为上下文传递,然后当我引用 'object.content' 时,django 从模型 Blog 中获取主键为 1 的对象,然后显示实际内容?是喜欢还是别的?我真的无法理解。任何关于它是如何发生的详细解释的帮助都会很有帮助。
Now, my question is, how does django know that 'object' explicitly means 'a' discrete blog? Like here I am only referring that primary key in url. So is it like django grabs that primary key from url
是的。
and then passes that primary key as context and then when I refer 'object.content' then django grabs the object
没有。 url 解析器从 url 中提取 pk 值并将其传递给 DetailView.get()
。然后 DetailView.get()
检索匹配的模型实例并将其传递给模板,名称为 "object".
现在 Klaus D. 提到,Django 是 OSS,因此您只需阅读代码即可了解 womething 的真正工作原理(如果 - 相当广泛的 - 文档尚未回答您的问题);-)
您可以在关于 DetailView 的 Django 文档中看到 DetailView 的控制流。
如果您查看视图的声明,您已经指定了要在其上创建查询的模型。
从链接的文档中,get_object
方法将使用 URL 中指定的 id/pk
获取对象。
然后通过 get_context_data
方法将对象添加到上下文中。 .content
method/property 也在 model object
的基础 类 之一中定义,它为 [=15] 上定义的属性提供 HTML 表示=] 你在模板中看到的。
希望这能给出有关流程的解释。但是,您应该阅读文档并使用调试器来理解视图的流程,而不是在这里问这样的问题。 :)
@dirkgroten 的评论还链接到一个非常好的站点,该站点与 Django 的视图和方法有关。 ccbv.co.uk