Django从数据库初始化base.html中的东西
Django init stuff at base.html from database
我正在寻找比我的解决方案更好的解决方案。我有base.html,它代表我的布局,在布局的顶部是菜单。诀窍在于,某些菜单项是根据数据库值"生成"的。我有一个动态应用程序,用户可以登录,菜单项是"项目",我希望只有特定用户的项目。另一个用户可以有不同的项目,因此会为他生成不同的菜单项。我有一个想法,但我对此不是很满意,它正在对这个菜单元素进行ajax调用和设置html。有一个问题是ajax调用会在每次请求后向服务器请求数据。你知道如何明智地解决我的问题吗?谢谢我忘了说明我使用的是Django框架。
除非您有某种缓存机制,否则每次发出请求时,无论是否使用AJAX,都必须进行数据库查询,以填充当前用户的projects
列表。
这里的问题应该尽可能通用,这样每个模板都会有projects
数组,而不会更改后端的所有视图函数。就我个人而言,如果您要在每个模板中显示项目菜单,我建议您创建一个context processor
。
context_processors选项是一个可调用的列表,称为上下文处理程序,它们以请求对象为参数,并返回要合并到上下文中的项的字典。
在settings.py:旁边的项目根路径中创建一个名为context_processors.py
的文件
context_processors.py
define projects(request):
if request.user.is_anonymous():
return {}
else:
return {'projects': request.user.project_set.all()}
并将其添加到设置中定义的TEMPLATE_CONTEXT_PROCESSORS
列表中。py:
TEMPLATE_CONTEXT_PROCESSORS = (
...
'myproject.context_processors.projects',
)
在您所谓的base.html模板中,只要当前用户登录,"项目"变量就会出现:
base.html
{% block menu %}
{% for project in projects %}
Do whatever you want to do with {{project}}
{% empty %}
Either user is not logged in or they don't have a project.
{% endfor %}
{% endblock %}
希望这能有所帮助。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何设置html元素填充的动画
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何编写HTML输入的JS内联
- Dojo不解析自定义小部件的模板html中的小部件声明性
- 使用javascript将动态表从一个html页面打印到另一个html页
- 通过javascript重定向html传递php变量
- 如何使Javascript动态html表及其上的事件
- 在chrome.tabs.onCreated之后加载HTML页面
- 如何在vs2002中调试html页面
- 如何使用javascript或html下载PDF格式的填写表单
- 视频HTML没有'无法在Internet Explorer 11上工作
- HTML表单提交时未执行外部函数
- HTML Playing Base 64编码音频,带angularJS,错误:[$interpole:nooncat]
- Django从数据库初始化base.html中的东西
- 从base.html扩展到模板时,静态js文件不运行
- 当HTML页面中有BASE标记时,SVG渐变变为黑色
- 当添加一个新的html元素(如iframe等)时,绝对url将被覆盖为相对url(即在url提供的前缀处添加base地址
- routerLink在Angular 2的组件模板之外,在base html中