如何从Django中的上下文向表中添加其他类
我有两个功能,一个用于MarketingMessage,另一个用于Slider 我已经有一个MarketingMessage功能,我想添加滑块,因为下面的功能无法正常工作,我想将它们组合在一起,因为它们来自同一型号 这是我想添加到其中的原始函数如何从Django中的上下文向表中添加其他类,django,Django,我有两个功能,一个用于MarketingMessage,另一个用于Slider 我已经有一个MarketingMessage功能,我想添加滑块,因为下面的功能无法正常工作,我想将它们组合在一起,因为它们来自同一型号 这是我想添加到其中的原始函数 def get_context_data(self, **kwargs): context = super(HomeView, self).get_context_data(**kwargs) try:
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
try:
context['marketing_message'] = MarketingMessage.objects.filter(
active=True).latest('timestamp')
except MarketingMessage.DoesNotExist:
context['marketing_message'] = None
return context
这是我想要去掉的函数,并将其包含到上面的函数中
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
try:
context['sliders'] = Sliders.objects.filter(
active=True).latest('timestamp')
except Sliders.DoesNotExist:
context['sliders'] = None
return context
这就是模型
class MarketingMessage(models.Model):
title = models.CharField(max_length=60)
message = models.TextField(
max_length=120)
active = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return self.title
class Slider(models.Model):
title = models.CharField(max_length=60)
image = models.ImageField(blank=False, upload_to='Marketing')
header_text = models.CharField(max_length=120, null=True, blank=True)
middle_text = models.CharField(max_length=120, null=True, blank=True)
footer_text = models.CharField(max_length=120, null=True, blank=True)
button_text = models.CharField(max_length=120, null=True, blank=True)
active = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return self.title
我已经尝试将它们组合到这个函数中,但它不起作用
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
try:
context['marketing_message':MarketingMessage.objects.filter(active=True).latest('timestamp'),
'slider':Slider.objects.filter(active=True).latest('timestamp')
]
except MarketingMessage.DoesNotExist:
context['marketing_message': None,
'Slider':None]
return context
谢谢大家您的新功能有一些问题。它有几个语法错误。我将编写一个正确的版本,其行为完全符合您的指示,然后提出一些建议 您的新视图如下所示:
def获取上下文数据(self,**kwargs):
context=super(HomeView,self)。获取上下文数据(**kwargs)
尝试:
上下文['marketing_message']=MarketingMessage.objects.filter(
活动=真)。最新('时间戳')
上下文['slider']=slider.objects.filter(
活动=真)。最新('时间戳')
除MarketingMessage.DoesNotExist外:
上下文['marketing_message']=无
上下文['slider']=None
返回上下文
这个问题是,在上面的示例中,Slider.DoesNotExist
未被处理。在我看来,你有两个很好的选择
None
None
这实际上取决于当其中一个失败时,你想对上下文做什么。我不完全理解你的问题。你能不能从你的第二个
获取上下文数据并将其添加到你的第一个逻辑中?你是否试图将营销信息
和滑块
组合在一起,使它们成为一个单一的模型,而不是一个?@dragonboz是的,它们已经在一个模型中了。我想将它们组合在一个功能中。我们中的一个人误解了一些事情。在您显示的代码中,MarketingMessage
和Slider
是两个独立的类,它们继承了models.Model
,使它们成为两个不同的模型。现在,您可能有一个单一的视图类(继承自views.view
)。我想这可能就是你的意思。因此,我的答案是从第二个函数手动将滑块
添加到上下文中的逻辑添加到第一个函数中。没有大惊小怪,没有混乱,没有魔术。@DragonBobZ这就是我所做的,但什么都没有发生'def get_context_data(self,**kwargs):context=super(HomeView,self)。get_context_data(**kwargs)try:context['marketing_message':marketing message.objects.filter(active=True)。latest('timestamp')),'slider':slider.objects.filter(active=True).latest('timestamp')]除了MarketingMessage.DoesNotExist:context['marketing_message':None,'slider':None]返回context`您介意将您已经尝试过的内容添加到您的问题中吗?这在评论中很难理解。
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
try:
context['marketing_message'] = MarketingMessage.objects.filter(
active=True).latest('timestamp')
context['slider'] = Slider.objects.filter(
active=True).latest('timestamp')
# this will be triggered when either exception is thrown.
except (MarketingMessage.DoesNotExist, Slider.DoesNotExist):
context['marketing_message'] = None
context['slider'] = None
return context
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
try:
context['marketing_message'] = MarketingMessage.objects.filter(
active=True).latest('timestamp')
except MarketingMessage.DoesNotExist:
context['marketing_message'] = None
try:
context['slider'] = Slider.objects.filter(
active=True).latest('timestamp')
except Slider.DoesNotExist:
context['slider'] = None
return context