Создание подкаталогов в django?
Я пытаюсь создать простой сайт, который содержит записи (посты в блоге), организованные в url по example.com/blog/category_id/post_id
Однако то, что я сейчас делаю, разрешает только example.com/blog/category_id. Может ли кто-нибудь показать мне, как изменить код, чтобы сделать его:
- List all blog posts when going to example.com/blog
- List all blog posts of a particular category when going to example.com/blog/category_id
- List a particular blog post when going to example.com/blog/category_id/post_id
Спасибо!
Если мне необходимо предоставить дополнительную информацию, пожалуйста, сообщите мне.
blog.urls.py
from django.urls import path
from . import views
app_name = "blog"
urlpatterns = [
path('', views.index, name='index'),
path('<int:welcome_id>/', views.welcome_detail, name='welcome_detail'),
path('blog/<int:category_id>/', views.category, name="category"),
path('blog/<int:category_id>/<int:blog_id>/', views.category, views.blog_post_detail, name="blog_detail"),
]
blog/models.py
from django.db import models
class WelcomePage(models.Model):
greeting_text = models.TextField(max_length=2000)
def most_recently_published(self):
return Status.objects.order_by('id')[0]
def __str__(self):
return self.greeting_text
class Categories(models.Model):
name = models.CharField(max_length=200)
category_title = models.CharField(max_length=200, default='')
def get_categories(self):
return Status.objects.order_by('id')
def __str__(self):
return self.name
class BlogPost(models.Model):
blog_title = models.CharField(max_length=200)
blog_text = models.TextField(max_length=10000)
pub_date = models.DateTimeField('date published')
categories = models.ForeignKey(Categories, null=True, on_delete=models.SET_NULL)
def most_recently_published(self):
return Status.objects.order_by('id')[:5]
def __str__(self):
return self.blog_title
blog/views.py
from django.shortcuts import render
from django.template import loader
from django.http import HttpResponse, Http404
from .models import WelcomePage, BlogPost, Categories
def index(request):
latest_welcome_message = WelcomePage.objects.order_by('id')
latest_blog_posts = BlogPost.objects.order_by('id')
categories = Categories.objects.order_by('id')
template = loader.get_template('blog/index.html')
context = {'latest_welcome_message' : latest_welcome_message, 'latest_blog_posts' : latest_blog_posts, "categories" : categories}
return render(request, 'blog/index.html', context)
def welcome_detail(request, welcome_id):
try:
welcome_message = WelcomePage.objects.get(pk=welcome_id)
except WelcomePage.DoesNotExist:
raise Http404("Question does not exist")
return render(request, 'blog/detail.html', {'welcome_message':welcome_message})
def category(request, category_id):
try:
blogs_of_category = BlogPost.objects.get(categories=category_id)
except BlogPost.DoesNotExist:
raise Http404("Blog does not exist")
return render(request, "blog/category.html", {"category":blogs_of_category})
def blog_post_detail(request, blog_id):
try:
blog_post_detail = BlogPost.objects.get(pk=blog_id)
except BlogPost.DoesNotExist:
raise Http404("Blog does not exist")
return render(request, "blog/blogdetail.html", {"blog":blog_post_detail})