如何使用 django 标签模板在前端显示类别?



我是编写程序和使用 Django 的初学者,现在我想在前端显示类别。我创建了一个外键,将"主题"命名为类别。通过输入 URL 成功访问主题(子类别(和帖子(通过使用 pk(。虽然 URL 配置是有效的,但我不知道如何使用模板标签将其放在前端。我想创建一个目录,当我单击某个目录时,将显示特定"主题"下的这些帖子。我通过"初学者的Django"和"专业的Django"一书学习了Django,但它没有涵盖这样的主题。我看在线教程,我非常困惑和沮丧。 (我的 Django 版本是 3.0.0(

感谢您的帮助:)

像这样的文章网址 http://127.0.0.1:8000/django/1主题 (FK( (PK 后(

我的模型

from django.db import models
from ckeditor.fields import RichTextField
class Topic(models.Model):
name = models.CharField(max_length=50)
slug = models.SlugField(max_length=50, default='self.name')
def get_absolute_url(self):
return reverse('topic',
args=[self.slug])
def __str__(self):
return self.name
class Post(models.Model):
title =  models.CharField(max_length=50)
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
content = RichTextField()
topic = models.ForeignKey(Topic, default=1, on_delete=models.SET_DEFAULT)
def __str__(self):
return self.title

视图

from django.shortcuts import render
from django.views.generic import ListView, DetailView
from .models import Post
class Home(ListView):
model = Post
template_name = 'home.html'
class TopicList(ListView):
model = Post
template_name = 'topiclist.html'
class PostDetail(DetailView):
model = Post
template_name = 'detail.html'
# Create your views here.
from django.shortcuts import render
from django.views.generic import ListView, DetailView
from .models import Post
class Home(ListView):
model = Post
template_name = 'home.html'
class TopicList(ListView):
model = Post
template_name = 'topiclist.html'
class PostDetail(DetailView):
model = Post
template_name = 'detail.html'

网址

from django.urls import path
from .views import Home, PostDetail, TopicList

urlpatterns = [
path('', Home.as_view(), name='home'),
path('<slug:topic>/<int:pk>', PostDetail.as_view(), name='detail'),
path('<slug:topic>/', TopicList.as_view(), name='topiclist'),

您将编写一个视图,在其中筛选与主题匹配的行。然后将返回的查询传递给模板:

Topic = Topic.objects.get(name = 'coding')
Posts = Post.objects.filter(topic=Topic)
return render(request, 'catalog.html', {'posts': Posts})

然后在模板文件中:

{% for post in posts %}
<li>{{ post.title }}</li>
{% endfor %}

最新更新