【发布时间】:2020-10-31 18:37:21
【问题描述】:
我正在尝试使用两个详细视图,它们将为同一模型呈现不同的模板,当然在不同的 URL 上。同一模型是否可以有不同的通用详细视图?如果没有,我想我只需要自己写。我所有的详细视图都路由到 absoluteurl,但在这种情况下,我希望每个详细视图都路由到我在类中定义的模板。
我使用下面的方法成功地创建了多个列表视图和更新视图,但是它在详细视图上不起作用,即使我声明了“course_detail_producer_view”,我总是以“course_detail”结束。
models.py
class Course(models.Model):
class Meta:
verbose_name = "Course"
verbose_name_plural = "Courses"
ordering = ['start_time']
pub_partner_choices = [
("company1", "company1"),
('company2', 'company2'),
]
status_choices = [
('hold', 'Hold'),
('editorial', 'Editorial'),
('approved', 'Approved'),
('cancelled', 'Cancelled'),
]
title = models.CharField(max_length=200)
slug = AutoSlugField(max_length=100, help_text="course title",
populate_from=['title', 'date'], unique=True, )
start_time = models.TimeField(blank=True, null=True)
end_time = models.TimeField(blank=True, null=True)
date = models.DateField(blank=True, null=True)
new_course = models.BooleanField(default=False)
new_instructor = models.BooleanField(default=False)
katacoda = models.BooleanField(default=False)
jupyterhub = models.BooleanField(default=False)
released = models.BooleanField(default=False)
status = models.CharField(max_length=50,
choices=status_choices,
blank=False
)
pub_partner = models.CharField(max_length=50,
choices=pub_partner_choices,
blank=False)
course_notes = models.TextField(max_length=500,
blank=True,
)
producer_notes = models.TextField(max_length=500, blank=True)
id = models.UUIDField(primary_key=True, default=uuid.uuid4,
editable=False
)
producer = models.ManyToManyField(Producer,
related_name="course",
blank=True,
)
def get_absolute_url(self):
"""Return URL to detail page of a Course"""
return reverse(
"course_detail",
kwargs={"slug": self.slug}
)
def __str__(self):
date_time = f"{self.date} {self.start_time}"
return f"{self.title} : {date_time}"
urls.py
path(
'courses/<str:slug>/',
CourseDetail.as_view(),
name='course_detail'
),
path(
'courses/producer-view/<str:slug>/',
CourseDetailProducerView.as_view(),
name='course_detail_producer_view'
),
views.py
class CourseDetail(LoginRequiredMixin, DetailView):
queryset = Course.objects.all()
template_name = 'lots_app/course_detail.html'
class CourseDetailProducerView(LoginRequiredMixin, DetailView):
queryset = Course.objects.all()
template_name = 'lots_app/course_detail_producer_view.html'
【问题讨论】:
标签: django django-models django-class-based-views