如何在 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 页面中显示数据库数据?的主要内容,如果未能解决你的问题,请参考以下文章