【问题标题】:Access a single object from Database ListView using Django使用 Django 从数据库 ListView 访问单个对象
【发布时间】:2020-10-24 10:54:42
【问题描述】:

我有一个通过 django ListView 传递的类。从这个ListView 我可以访问我的数据库项目。我的问题是使用列表视图访问数据库将加载所有条目。如果我只想要一个条目怎​​么办,例如第 5 个条目。也许listView 是使用错误的视图类型?我下面的代码可以工作,并在屏幕上将我的数据库条目显示为列表。

models.py

from django.db import models

class Datadata(models.Model):
    text = models.TextField()

views.py

class HomePageView(ListView):
    model = Datadata
    template_name = 'hello.html'

templates/hello.html

{% for post in object_list %}
<h1>{{ post.text }}</h1>
{% endfor %}

【问题讨论】:

  • 那么你通常使用DetailView

标签: python html django django-models django-views


【解决方案1】:

那么你通常使用DetailView [Django-doc]。例如,您可以将其定义为:

from django.views.generic.detail import DetailView

class HomePageView(DetailView):
    model = Datadata
    template_name = 'hello.html'

然后您可以使用以下方法渲染它:

&lt;h1&gt;{{ <b>object.</b>text }}&lt;/h1&gt;

方便的是DetailView,就像所有带有SingleObjectModelMixin [Django-doc] 的视图会自动过滤主键pk 或slug 字段。

所以 url 模式应该是这样的:

urlpatterns = [
    path('data/<int:pk>/', HomePageView.as_view(), name='data-detail'),
]

如果我们然后访问/data/<b>5</b>,它将显示作为主键5的项目的数据。

【讨论】:

  • 谢谢,这很好。但是,我想要做的是更多地能够在数据库中选择不同的元素,并将它们放在我的 html 周围。例如,如果我希望我的数据库的第一个条目位于我的 HTML 横幅中,那么第二个元素将放置在 &lt;H1&gt; 标签中,第三个元素放置在 &lt;p&gt; 标签中。那么是否更像是通过{{ object.text[:1] }} 或类似的方式访问这些元素?所以我只希望我的url path 指向我的hello/,然后能够用我的数据库元素填充我的HTML。如果这有意义的话。
猜你喜欢
  • 1970-01-01
  • 2021-04-23
  • 2021-12-07
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多