python - 如何在每个页面中向 Django 发送上下文而不从所有视图发送
问题描述
我正在尝试创建一个电子商务应用程序并在其中包含购物车选项。但是,在网站的每个页面(或每个视图)上,我总是输入代码......
context = {
"no_in_cart":no_of_items_in_cart(request)
}
哪里no_of_items_in_cart
是查找购物车中商品数量的功能。但我觉得这是对代码的浪费,可能有几个低效率的地方。而且我不确定如何发送此代码auth_views
,例如登录或注册视图。
任何帮助将不胜感激。谢谢!
编辑内容
所以现在在我的 tag_name.py 我有代码..
from django import template
register = template.Library()
@register.inclusion_tag("base.html")
def a_tag_name(request):
return {"no_in_cart":no_of_items_in_cart(request)}
def no_of_items_in_cart(request):
total = 0
for item in request.session.get('order'):
total += item["quantity"]
return (total)
在我的 base.html 中,页面顶部有以下标签...
{% load static %}
{% load tag_name %}
{% a_tag_name request %}
<!DOCTYPE html>
<html lang="en">
<head>
...
而且我不会重复标签{% load tag_name %}
或{% a_tag_name request %}
任何其他子模板。
然而,这样做,我被抛出一个错误......
Exception Type: AttributeError
Exception Value:'str' object has no attribute 'session'
它突出了这条线{% a_tag_name request %}
。
关于如何解决这个问题的任何想法?谢谢!
解决方案
如果我正确理解您的问题。您在许多页面中显示“no_in_cart”,每次呈现页面时都必须传递此上下文变量。您希望有一种方法可以在许多页面中使用上下文变量(no_in_cart),但您不必每次都传递它。这可以使用模板标签来完成。不确定它是否有效。如果你愿意,我可以提供一个示例代码来处理模板标签。
如下所述创建文件:-
Appdirectory
templatetags
__init__.py
tag_name.py
models.py
views.py
在 tag_name.py 中:-
from django import template
register = template.Library()
@register.inclusion_tag("condition.html")
def a_tag_name(request):
return {"no_in_cart":no_of_items_in_cart(request)}
然后在 condition.html:-
# some django template code(html) if required
{{no_in_cart}}
然后最后在您要使用它的页面中。在顶部首先加载标签
{% load tag_name %}
然后把这个放在想要的地方
{% a_tag_name request %}
文件的位置应与指定的一样。您可以重命名除模板标签之外的所有内容。同时运行 manage.py collectstatic。希望能帮助到你。
如果您想了解有关标签的更多信息,请参阅:- https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/
https://medium.com/@hiteshgarg14/creating-custom-template-tags-in-django-application-7bd1dcfeb144
推荐阅读
- react-native - 如何使用单个 Handler 处理多个 TextInput?
- uitableview - 如何更新我的数据源并在我的 tableview 中使用 RxSwift 为更改设置动画?
- html - 点击登录按钮后我想导航到另一个页面
- javascript - materializecss 在谷歌脚本网络应用程序的第二条记录后添加“,”(逗号)
- dynamics-crm - 什么是实体引用和查询表达式?请举几个简单的例子
- java - 有多个孩子时如何检测父视图的滑动?
- java - 检查需要移动多少元素才能对数组进行排序的最佳方法是什么?
- jquery - bootstrap-select 默认样式似乎不正确
- linux - 即使状态已分离,pthread 中的内存泄漏
- javascript - 如何访问 config.json 文件中的 .env 变量?