我是编写程序和使用 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 %}