Python Django:如何在页面上显示特定类别的帖子
我正在Django建立一个博客,注册用户可以在这里写博客文章。我想在一个页面上显示与特定类别关联的帖子。我试图这样做,但它没有显示与文章相关的帖子。这是我的档案 型号.pyPython Django:如何在页面上显示特定类别的帖子,python,django,frameworks,Python,Django,Frameworks,我正在Django建立一个博客,注册用户可以在这里写博客文章。我想在一个页面上显示与特定类别关联的帖子。我试图这样做,但它没有显示与文章相关的帖子。这是我的档案 型号.py from django.db import models from django.contrib.auth.models import User from django.urls import reverse from datetime import datetime, date class Category(m
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from datetime import datetime, date
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_absolute_url(self):
# return reverse('article', args=(str(self.id)))
return reverse('home') # go to home page after article submission
class Post(models.Model):
title = models.CharField(max_length=255)
tags = models.CharField(max_length=255, default="Ryan's World")
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
post_date = models.DateField(auto_now_add=True)
category = models.CharField(max_length=255, default="uncategorized")
def __str__(self):
return self.title+' | '+str(self.author)
def get_absolute_url(self):
# return reverse('article', args=(str(self.id)))
return reverse('home') # go to home page after article submission
from django.urls import path
# from . import views
from .views import HomeView, ArticleDetailView, AddPostView, UpdatePostView, DeletePostView, AddCategoryView, CategoryView
urlpatterns = [
# path('', views.home , name='home'),
path('', HomeView.as_view(), name="home"),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article"),
path('add_post/', AddPostView.as_view(), name='add_post'),
path('add_category/', AddCategoryView.as_view(), name='add_category'),
path('article/edit/<int:pk>', UpdatePostView.as_view(), name="updatearticle"),
path('article/<int:pk>/remove', DeletePostView.as_view(), name="deletearticle"),
path('category/<str:cats>/', CategoryView, name='category')
from django import forms
from .models import Post, Category
choices = Category.objects.all().values_list('name','name')
choice_list = []
for item in choices:
choice_list.append(item)
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'tags', 'author','category' ,'body')
widgets = {
'title': forms.TextInput(attrs={'class':'form-control', 'placeholder': 'this is placeholder'}),
'tags': forms.TextInput(attrs={'class':'form-control'}),
'author': forms.Select(attrs={'class':'form-control'}),
'category': forms.Select( choices = choice_list, attrs={'class':'form-control'}),
'body': forms.Textarea(attrs={'class':'form-control'}),
}
视图.py
创建基于函数的视图
from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post, Category
from .forms import PostForm, EditForm
from django.urls import reverse_lazy
class HomeView(ListView):
model = Post
template_name = 'home.html'
ordering = ['-id']
def CategoryView(request, cats):
category_posts = Post.objects.filter(category=cats)
return render(request, 'categories.html', {'cats':cats ,'category_posts': category_posts })
. . .
url.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from datetime import datetime, date
class Category(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_absolute_url(self):
# return reverse('article', args=(str(self.id)))
return reverse('home') # go to home page after article submission
class Post(models.Model):
title = models.CharField(max_length=255)
tags = models.CharField(max_length=255, default="Ryan's World")
author = models.ForeignKey(User, on_delete=models.CASCADE)
body = models.TextField()
post_date = models.DateField(auto_now_add=True)
category = models.CharField(max_length=255, default="uncategorized")
def __str__(self):
return self.title+' | '+str(self.author)
def get_absolute_url(self):
# return reverse('article', args=(str(self.id)))
return reverse('home') # go to home page after article submission
from django.urls import path
# from . import views
from .views import HomeView, ArticleDetailView, AddPostView, UpdatePostView, DeletePostView, AddCategoryView, CategoryView
urlpatterns = [
# path('', views.home , name='home'),
path('', HomeView.as_view(), name="home"),
path('article/<int:pk>', ArticleDetailView.as_view(), name="article"),
path('add_post/', AddPostView.as_view(), name='add_post'),
path('add_category/', AddCategoryView.as_view(), name='add_category'),
path('article/edit/<int:pk>', UpdatePostView.as_view(), name="updatearticle"),
path('article/<int:pk>/remove', DeletePostView.as_view(), name="deletearticle"),
path('category/<str:cats>/', CategoryView, name='category')
from django import forms
from .models import Post, Category
choices = Category.objects.all().values_list('name','name')
choice_list = []
for item in choices:
choice_list.append(item)
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'tags', 'author','category' ,'body')
widgets = {
'title': forms.TextInput(attrs={'class':'form-control', 'placeholder': 'this is placeholder'}),
'tags': forms.TextInput(attrs={'class':'form-control'}),
'author': forms.Select(attrs={'class':'form-control'}),
'category': forms.Select( choices = choice_list, attrs={'class':'form-control'}),
'body': forms.Textarea(attrs={'class':'form-control'}),
}
我忘了更正这里的导入缩进。。。但是缩进在我的项目文件中是正确的