Python 为什么我的视图上下文在这种情况下不显示?
我应该看到一个值显示在“通知”旁边,感叹号之前 正如听起来一样,我无法显示视图中提供的上下文变量“{var}”。我尝试过cbv和基于函数的视图 在这个项目中,我使用Django 2.1,Python别名设置为3.6 这是我使用的第一种视图,仅用于显示数字:Python 为什么我的视图上下文在这种情况下不显示?,python,django,Python,Django,我应该看到一个值显示在“通知”旁边,感叹号之前 正如听起来一样,我无法显示视图中提供的上下文变量“{var}”。我尝试过cbv和基于函数的视图 在这个项目中,我使用Django 2.1,Python别名设置为3.6 这是我使用的第一种视图,仅用于显示数字: class NotificationView(DetailView): template_name = "base.html" def get_context_data(self, **kwargs): me
class NotificationView(DetailView):
template_name = "base.html"
def get_context_data(self, **kwargs):
message_count = Message.objects.filter(recipient=self.request.user).count()
safeTrans_count = SafeTransaction.objects.filter(trans_recipient=self.request.user).count()
context = super().get_context_data(**kwargs)
context["Notify"] = message_count + safeTrans_count
return context
这是第二种视图,我尝试创建最简单的函数来显示上下文:
def NotifyView(request):
title = "Notification View %s" % (request.user)
context = {
"Notification_Count": 10,
"Notification_Title": title,
}
return render(request, "base.html", context)
这是用于显示的模板的一个片段(诸如{{Notification_Title}}之类的变量根本不显示):
{%if user.u经过身份验证%}
{%else%}
任何关于我可以忽略什么的想法都将不胜感激
:::
这是我对这个特殊问题的解决方案。请告诉我是否有更好的方法来显示值,而不必将模板上的实际模板标记传递给用户:{%notify user%}
我认为您对URL、视图和模板之间的关系感到困惑。URL调用视图,视图(可能)呈现模板。因此,该视图负责提供呈现模板所需的所有信息。您不能仅仅定义一个完全独立的视图,并期望它的信息以某种方式进入模板
如果您有需要通过多个视图提供给模板的数据,您可以使用多种方法—共享基本视图类、上下文处理器或自定义模板标记。第二个Python代码片段相当混乱(语法无效)。您看到了什么?实际问题是什么?我将添加一个屏幕截图来说明我所看到的内容。抱歉@AKX,我只是注意到,我相信这一定是我的复制粘贴错误,我相信我现在已经更正了。查看代码,没有什么立即出错的。您是否专门配置了
模板
?您确定您正在编辑的所有文件都是您期望的吗(例如,您没有意外地编辑模板的错误副本)?下面是整个base.html的外观。index.html和其他所有内容都是从该文件继承的,它们不也应该继承上下文吗?不,这与继承无关。你脑子里的东西倒过来了。基本URL调用索引视图,该视图呈现模板。您的notify视图从未被调用,因为调用视图的唯一对象是URL。好的,我明白了,那么有没有一种方法可以同时调用views.index和NotificationsView.as_view()在同一行中,或者我必须重新布线,以便所有内容都以/index/开头,并且我的base.html路径是“”?是的,包含标记可以工作,或者,您可以使用一个简单的标记直接在基本模板中显示通知计数。两者都可以。您可以在decorator中使用takes_context=True
参数来确保将完整的上下文(包括请求
)传递给标记函数。
{% if user.is_authenticated %}
<a class="active-2" href="#">Notifications{{Notification_Title}}
<i class="fas fa-exclamation-circle">
</i>
</a>
{% else %}