如何在 Django 模板标签中设置全局可访问的上下文变量?
How to set globally-accessible context variables in django template tags?
有一个模板标签,其中 returns 是列表中的一个随机元素。我还需要保存列表中的所有元素以及在上下文中选择的元素,然后在 django-debug-toolbar 面板中描述该信息。
from django import template
import random
register = template.Library()
@register.simple_tag(takes_context=True, name='pickrandomelementtag')
def pickrandomelementtag(context, list_of_random_elements):
context.dicts[0]["key18"] = "value19"
return random.choice(list_of_random_elements)
所以我用给定的行测试设置变量功能:
context.dicts[0]["key18"] = "value19"
我可以在模板中访问 {{key18}},但我的目标是设置此变量以便稍后(全局?)从 django-debug-toolbar 面板访问它。这就是我被困的地方。
这是我的 django-debug-toolbar panels.py 文件:
from debug_toolbar.panels import Panel
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from django.template.response import SimpleTemplateResponse
class RandomPanel(Panel):
name = "RandomPanel;"
has_content = True
template = 'panels/randompanel.html'
def title(self):
return _('Random Panel')
def generate_stats(self, request, response):
print('that is where I need to access key18')
self.record_stats(
{
"request": request
}
)
如何在 RandomPanel class 对象的 generate_stats
方法中访问上下文变量 key18
?或者 context
是在模板标签中设置自定义变量的错误位置,您会建议其他方法吗?非常感谢!
您实际上可以将信息存储在请求本身中。假设 context_processor
有 django.template.context_processors.request
(在默认设置中)
@register.simple_tag(takes_context=True, name='pickrandomelementtag')
def pickrandomelementtag(context, list_of_random_elements):
context['request'].META['MY_INFO'] = "value19"
return random.choice(list_of_random_elements)
然后您在 Panel
中有 request
对象,您可以在其中使用此信息。
有一个模板标签,其中 returns 是列表中的一个随机元素。我还需要保存列表中的所有元素以及在上下文中选择的元素,然后在 django-debug-toolbar 面板中描述该信息。
from django import template
import random
register = template.Library()
@register.simple_tag(takes_context=True, name='pickrandomelementtag')
def pickrandomelementtag(context, list_of_random_elements):
context.dicts[0]["key18"] = "value19"
return random.choice(list_of_random_elements)
所以我用给定的行测试设置变量功能:
context.dicts[0]["key18"] = "value19"
我可以在模板中访问 {{key18}},但我的目标是设置此变量以便稍后(全局?)从 django-debug-toolbar 面板访问它。这就是我被困的地方。
这是我的 django-debug-toolbar panels.py 文件:
from debug_toolbar.panels import Panel
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from django.template.response import SimpleTemplateResponse
class RandomPanel(Panel):
name = "RandomPanel;"
has_content = True
template = 'panels/randompanel.html'
def title(self):
return _('Random Panel')
def generate_stats(self, request, response):
print('that is where I need to access key18')
self.record_stats(
{
"request": request
}
)
如何在 RandomPanel class 对象的 generate_stats
方法中访问上下文变量 key18
?或者 context
是在模板标签中设置自定义变量的错误位置,您会建议其他方法吗?非常感谢!
您实际上可以将信息存储在请求本身中。假设 context_processor
有 django.template.context_processors.request
(在默认设置中)
@register.simple_tag(takes_context=True, name='pickrandomelementtag')
def pickrandomelementtag(context, list_of_random_elements):
context['request'].META['MY_INFO'] = "value19"
return random.choice(list_of_random_elements)
然后您在 Panel
中有 request
对象,您可以在其中使用此信息。