python - Django url 按类别 slug
问题描述
我需要两种方法来对 Django 中的帖子进行分类。第一个是按学校,第二个是按健康类型(身体/心理等)
模型.py
from django.db import models
from django.db.models.signals import pre_save
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse
from ckeditor.fields import RichTextField
from ckeditor_uploader.fields import RichTextUploadingField
from PIL import Image
class Category(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
class School(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'school'
verbose_name_plural = 'schools'
def __str__(self):
return self.name
class VideoPost(models.Model):
category = models.ForeignKey('Category', on_delete=models.CASCADE)
school = models.ForeignKey('School', on_delete=models.CASCADE)
title = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, unique = True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
video = models.CharField(max_length=100, blank=True)
content = RichTextUploadingField()
image = models.ImageField(upload_to='images', null=True, blank=True)
date_posted = models.DateTimeField(default=timezone.now)
def _get_unique_slug(self, *args, **kwargs):
self.slug = slugify(self.title)
super(VideoPost, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
视图.py
from django.shortcuts import render, get_object_or_404
from django.utils import timezone
from .models import VideoPost
from .forms import PostForm
from django.shortcuts import redirect
# Create your views here.
def post_list(request):
posts = VideoPost.objects.order_by('-date_posted')
return render(request, 'stories/browse.html', {'posts': posts})
def post_detail(request, post_slug):
# post = get_object_or_404(VideoPost, pk=pk)
post = get_object_or_404(VideoPost, slug=post_slug)
return render(request, 'stories/post_detail.html', {'post': post})
def post_new(request):
if request.method == "POST":
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.published_date = timezone.now()
post.save()
return render(request, 'stories/post_detail.html')
else:
form = PostForm()
return render(request, 'stories/post_new.html', {'form': form})
网址.py
## the way it is right now is displaying all posts no matter what category they are in
('post/', story_views.post_list, name='post_list'),
## I think this is how to categorize and sort them by category? but not working properly
# path('post/<slug:post_category>', story_views.post_list, name='post_list'),
('post/<slug:post_slug>/', story_views.post_detail, name='post_detail'),
('post/new', story_views.post_new, name='post_new'),
在模板中
//for A School
// It should link to Post lists that have "A" school category and its type of wellness
//something like
<a href="{% url 'post_list' A_School, Physical %}">
<a href="{% url 'post_list' A_School, Mental %}">
//for B School as well
<a href="{% url 'post_list' B_School, Physical %}">
<a href="{% url 'post_list' B_School, Mental %}">
我不确定这个问题是否足够清楚。我坚持的是按两个不同的类别显示帖子并将其与模板 url 模式链接。任何帮助将非常感激。
解决方案
应该是可读的,不需要解释。
def post_list(request):
category = request.GET.get('category', None)
whatever = request.GET.get('whatever', None)
posts = VideoPost.objects.all()
if category:
# you can still use .order_by after .filter()
posts.filter(category=category)
if whatever:
posts.filter(whatever=whatever)
# do the rest of your logic here like the one above
return render(request, 'stories/browse.html', {'posts': posts})
这假设您将类别作为query param
www.myexample.com/?category=myawesomecategory
推荐阅读
- python - PyOpenGL 接受键盘输入
- c++ - 为什么(Hacker earth - Charged up Array)一个代码被接受而另一个代码产生错误答案
- c# - 如何使 UWP ContentDialog 真正模态化
- python-3.x - 根据另一列 pandas 中的具体条件计算 Avg
- php - IDIORM:无法从 mysql / php 中提取数据(非常简单,但对于新手来说太复杂了)
- python - 在多个蜘蛛中运行scrapyd
- python-3.x - 如何从python中的列表中删除单引号
- python - 自定义聚合到 pyspark 中的 JSON
- node.js - 使用 Windows 10 中的 Node Js 扫描和连接 BLE 设备
- node.js - 如何将图像缓冲区传递给 Tensorflow JS decodeImage 方法?