【发布时间】:2019-09-01 01:25:02
【问题描述】:
这似乎是一个非常基本的事情,所以我希望这是一个直截了当的答案......对不起,如果这是愚蠢的。
我有一个名为 Item 的模型。它有标题、正文、链接等。但是,它也有一个属性“类型”,即“视频”、“播客”或“文章”。
目前,我使用通用类 'DetailView' 来呈现 Item 的详细信息页面。该模板名为 item_detail.html,并从 DetailView 传递给请求。
我要做的就是让视图根据“类型”属性发送不同的模板。所以如果 item.type = 'article' 渲染一个文章模板,如果 item.type = 'video' 渲染一个视频模板。
在仍然使用 DetailView 时这是否可能?
这是我在视图中尝试的:
class ItemDetailView(generic.DetailView):
model = Item
if Item.type == 'video':
template_name = 'curate/item_video.html'
这并没有达到我想要的效果 - 实际上模板只是正常渲染。我错过了什么吗?我还考虑为“视频”、“播客”和“文章”创建一个全新的模型,但我宁愿避免这种情况,并在网站上使用“项目”作为强大的内容类型。
views.py
class ItemDetailView(generic.DetailView):
model = Item
if Item.type == 'video':
template_name = 'curate/item_video.html'
models.py
class Item(models.Model):
slug = models.SlugField(unique=True,max_length=1000)
type = models.CharField(max_length=2000,
choices=type_choices,
default='article',
blank=True)
urls.py
path('<int:pk>/', views.ItemDetailView.as_view(), name='item_detail')
【问题讨论】:
标签: python django templates model