如何将通用视图代码放入Django基模板中
我有一个简单的Django站点,它有一个基本模板,然后是针对特定页面的各种模板。这对于应用品牌、样式等非常有效 我的站点在概念上类似于JIRA,每个视图都需要一个名为project的总体变量来通知,用户可以从菜单栏的下拉列表中选择该变量如何将通用视图代码放入Django基模板中,django,django-templates,django-views,Django,Django Templates,Django Views,我有一个简单的Django站点,它有一个基本模板,然后是针对特定页面的各种模板。这对于应用品牌、样式等非常有效 我的站点在概念上类似于JIRA,每个视图都需要一个名为project的总体变量来通知,用户可以从菜单栏的下拉列表中选择该变量 菜单栏位于基础模板中。下拉列表将由数据库查询填充(获取登录用户关联的所有项目)。如何进行查询并将数据发送到基本模板?我不希望将相同的查询附加到使用该模板的每个视图 最近,我一直在中间件对象中存储每个页面上调用的查询,并将响应存储在请求对象中 比如说 # Adva
菜单栏位于基础模板中。下拉列表将由数据库查询填充(获取登录用户关联的所有项目)。如何进行查询并将数据发送到基本模板?我不希望将相同的查询附加到使用该模板的每个视图 最近,我一直在中间件对象中存储每个页面上调用的查询,并将响应存储在请求对象中 比如说
# Advanced Queries
from django.db.models import Q # If you need if ( not required )
from django.conf import settings # Application Configuration
class NameThisClass(object):
def process_request(self, request):
"""
Do some processing to get information from the url to load the correct project information.
"""
request.projects = {}
request.projects["menu"] = Menu.objects.filter(params)
然后,您就可以在每个模板中访问它,并且无需从
模块视图
像这样
{{ request.menu }}
注意:若需要,这就像运行对象的传统for循环一样
您将不得不通过查找来从URL获取正确的信息,但是
在某些情况下,这确实微不足道
注意事项:
确保settings.py文件中有安装上下文处理器。
以及在settings.py中的中间件dict中添加中间件位置
最近,我一直在中间件对象中存储每个页面上调用的查询,并将响应存储在请求对象中 比如说
# Advanced Queries
from django.db.models import Q # If you need if ( not required )
from django.conf import settings # Application Configuration
class NameThisClass(object):
def process_request(self, request):
"""
Do some processing to get information from the url to load the correct project information.
"""
request.projects = {}
request.projects["menu"] = Menu.objects.filter(params)
然后,您就可以在每个模板中访问它,并且无需从
模块视图
像这样
{{ request.menu }}
注意:若需要,这就像运行对象的传统for循环一样
您将不得不通过查找来从URL获取正确的信息,但是
在某些情况下,这确实微不足道
注意事项:
确保settings.py文件中有安装上下文处理器。
以及在settings.py中的中间件dict中添加中间件位置
最好的我决定使用模板标签。以下是如何做到这一点:
templatetags/
文件夹templatetags
文件夹中,创建一个名为\uuuuu init\uuuuuuuuuu.py的空文件
templatetags
文件夹中,为标记创建一个文件。我们称之为菜单项.py
from django import template
from relevant_app import ItemToDisplay
register = template.Library()
@register.inclusion_tag('relevant_app/menu_items.html', takes_context=True)
def menu_items(context):
return {'items': ItemsToDisplay.objects.all()}
菜单项.html
模板文件(在这种情况下,在相关应用程序
项目中,它将是模板\相关应用程序
):
这似乎是Django的方法。但是标记类型似乎有点复杂;我努力让他们都接受上下文,所以我现在只使用
inclusion\u标记。我决定使用模板标记。以下是如何做到这一点:
在相关应用程序文件夹下,创建一个templatetags/
文件夹
在templatetags
文件夹中,创建一个名为\uuuuu init\uuuuuuuuuu.py的空文件
在templatetags
文件夹中,为标记创建一个文件。我们称之为菜单项.py
这将是一个包含标记,这意味着它还需要一个模板文件。设置如下:
from django import template
from relevant_app import ItemToDisplay
register = template.Library()
@register.inclusion_tag('relevant_app/menu_items.html', takes_context=True)
def menu_items(context):
return {'items': ItemsToDisplay.objects.all()}
在相关模板文件夹中创建菜单项.html
模板文件(在这种情况下,在相关应用程序
项目中,它将是模板\相关应用程序
):
这似乎是Django的方法。但是标记类型似乎有点复杂;我努力让他们都接受上下文,所以我现在只使用inclusion\u标记
。例如,这是模板标记的作业吗?例如,这是模板标记的作业吗?