首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在一个视图中显示多个模型,并获取每个后django的slug url

在Django中,可以通过使用视图来显示多个模型,并获取每个模型的slug URL。下面是一个实现这个功能的示例:

首先,需要定义模型。假设我们有两个模型:Post和Category。

代码语言:txt
复制
from django.db import models
from django.urls import reverse

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)

    def get_absolute_url(self):
        return reverse('category_detail', args=[self.slug])

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    slug = models.SlugField(unique=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('post_detail', args=[self.slug])

接下来,需要创建视图来显示多个模型。可以使用Django的ListView来实现这个功能。

代码语言:txt
复制
from django.views.generic import ListView

class PostCategoryView(ListView):
    model = Post
    template_name = 'post_category.html'
    context_object_name = 'posts'

    def get_queryset(self):
        category_slug = self.kwargs['category_slug']
        category = Category.objects.get(slug=category_slug)
        return Post.objects.filter(category=category)

在上面的代码中,我们使用ListView来显示Post模型,并通过category_slug参数来过滤出特定分类的帖子。

然后,需要创建模板来渲染视图。

post_category.html模板示例:

代码语言:txt
复制
{% for post in posts %}
    <h2><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h2>
    <p>{{ post.content }}</p>
{% endfor %}

最后,需要定义URL模式来映射视图。

代码语言:txt
复制
from django.urls import path
from .views import PostCategoryView

urlpatterns = [
    path('category/<slug:category_slug>/', PostCategoryView.as_view(), name='category_detail'),
]

在上面的代码中,我们定义了一个URL模式,将category_slug作为参数传递给PostCategoryView视图。

现在,当访问类似于/category/my-category/的URL时,将会显示该分类下的所有帖子。

这是一个简单的示例,展示了如何在一个视图中显示多个模型,并获取每个模型的slug URL。根据实际需求,你可以根据这个示例进行扩展和定制。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券