如何在 Django 网站的 HTML 页面中显示数据库数据?

Posted

技术标签:

【中文标题】如何在 Django 网站的 HTML 页面中显示数据库数据?【英文标题】:How to show DB data in my HTML page in Django website? 【发布时间】:2021-01-20 18:58:27 【问题描述】:

我检查了我的数据库表,我输入的数据在我的数据库中,但我在 Django 网站的 html 页面上什么也看不到。

这是我的观点:

from django.shortcuts import render
from django.http import HttpResponse, JsonResponse
from .models import Article


# Create your views here.
def home(request):
context = 
    "articles": Article.objects.filter(status="publish").order_by("-publish")

return render(request, 'website/home.html', context)

这是我的模型:

   from django.db import models
   from django.utils import timezone       
  # Create your models here.
  class Article(models.Model):
   STATUS_CHOICES = (
    ('Draft', 'Draft'),
    ('Published', 'Published')
)
title = models.CharField(max_length=300)
slug = models.SlugField(max_length=100, unique=True)
description = models.TextField()
thumbnail = models.ImageField(upload_to="images")
publish = models.DateTimeField(default=timezone.now)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES)

def __str__(self):
    return self.title

这是我的 HTML 页面:

<div style="text-align: center;">
% for article in articles %
<img src=" article.thumbnail.url" >
<h1><a href=" article.slug ">  article.title </a></h1>
<small> article.publish </small>
<p> article.description </p>
% endfor %

【问题讨论】:

【参考方案1】:

没有选择发布。 需要将其更改为已发布。像这样: 上下文

 = 
    "articles": Article.objects.filter(status="published").order_by("-publish")

因为您的选择是:

 STATUS_CHOICES = (
    ('Draft', 'Draft'),
    ('Published', 'Published')

【讨论】:

【参考方案2】:

在您给出的示例中,ListView 似乎更容易实现您想要做的事情。基于类的视图并不总是更好的解决方案,但可以更好地快速实现常见任务,例如列出数据库中的对象。

views.py

​​>

列表视图将模型作为参数,并将上下文数据交给模板(默认情况下,上下文数据将被称为object_list)。

from django.views.generic.list import ListView
from .models import Article

class ArticleListView(ListView):

    model = Article

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        return context

urls.py

​​>

由于这是一个基于类的视图,您需要在 urls.py 中对其进行稍微不同的处理:

from django.urls import path

from article.views import ArticleListView

urlpatterns = [
    path('', ArticleListView.as_view(), name='article-list'),
]

HTML 模板

默认情况下,这个基于类的视图将在您的应用程序模板目录中查找名为 article_list.html 的 HTML 模板。如果您希望更改此模板名称,则需要从模板目录中指定其位置,如下所示:template_name = "myapp/a_different_name.html"

您的 article_list.html 现在将如下所示。

<div style="text-align: center;">
% for article in object_list %
    <img src=" article.thumbnail.url" >
    <h1><a href=" article.slug ">  article.title </a></h1>
    <small> article.publish </small>
    <p> article.description </p>
% endfor %

更多关于基于类的视图的信息可以在这里找到here。

【讨论】:

以上是关于如何在 Django 网站的 HTML 页面中显示数据库数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在新页面中显示 django 搜索结果

没有在 html 模板 django 中显示模型值

如何在 Django html 页面中显示外键数据?

Django视图如何决定渲染/显示哪个html页面?

Django 3 - 如何创建许多页面然后在菜单上显示它们?

有没有办法在 Django 中显示登录错误?