django在模板中显示上下文数据,而不通过url调用视图

时间:2014-11-17 06:30:55

标签: python django templates view

我写了一个观点:

class ShowNotifications(TemplateView):

context = {}
model = Notification
template_name = "notifications.html"

def get_context_data(self, **kwargs):
    context = super(ShowNotifications,self).get_context_data(**kwargs)

    context['unseen_notifications'] =  Notification.objects.filter(body__user=self.request.user).filter(viewed=False)
    context['seen_notifications'] = Notification.objects.filter(body__user=self.request.user).filter(viewed=True)
    return context

我在模板中显示了它的上下文。我已经创建了一个通知弹出窗口,用户可以在Facebook中查看通知,登录后可以看到他们的通知。

我制作了“notifications.html”并将其包含在通知导航中。当我点击它不显示任何东西。但是,当我通过像url(r'^notifications/', ShowNotifications.as_view(), name='notifin') ,这样的网址调用视图时,它会显示通知,但我希望它会弹出显示。

我怎样才能做到这一点......? 需要帮助..

2 个答案:

答案 0 :(得分:1)

我认为通过" include"包含模板视图是不可能的。模板标签。在当前上下文https://docs.djangoproject.com/en/dev/ref/templates/builtins/#include中包含加载模板。

在我看来,您应该使用自定义模板标记。 https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

答案 1 :(得分:1)

听起来你想要将某些变量添加到每个视图的上下文中,而不仅仅是这个。

一种方法是使用context processor

# myapp/context_processors.py

def notifications(request):
    "Context processor for adding notifications to the context."
    return {
        'unseen_notifications': Notification.objects.filter(
            body__user=request.user).filter(viewed=False),
        'seen_notifications': Notification.objects.filter(
            body__user=request.user).filter(viewed=True),
    }

您还需要将上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS:

# settings.py

...
TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'myapp.context_processors.notifications',
)