首页 > 解决方案 > 如何从基于类的视图中将模型类属性作为上下文传递

问题描述

我想将Post模型title作为上下文从我的基于类的视图中传递给模板PostDetailView。这个标题上下文将是我的模板的标题。我怎么能做到这一点?所有必要的代码都在下面给出请帮助。

模型.py:

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone


class Post(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=150)
    content = models.TextField()
    date_posted = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return f'{self.author}\'s Post'

视图.py:

from django.shortcuts import render
from .models import Post
from django.contrib.auth.decorators import login_required
from django.views.generic import ListView, DetailView
from django.utils.decorators import method_decorator
    

@method_decorator(login_required, name='dispatch')
class PostListView(ListView):
    model = Post
    context_object_name = 'posts'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = 'Home'
        return context

class PostDetailView(DetailView):
    model = Post
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['title'] = '?'
        return context

标签: pythondjangodjango-modelsdjango-views

解决方案


您不必将标题传递给上下文,因为它已经存在。

在模板中,您可以使用{{ object.title }}

或者

出于某种原因,如果您仍然想覆盖get_context_data,那么您可以使用self.object.title

def get_context_data(self, **kwargs):
     context = super().get_context_data(**kwargs)
     context['title'] = self.object.title
     return context

并在模板中{{ title }}


推荐阅读