[英]How to set globally-accessible context variables in django template tags?
有一個模板標簽,它從列表中返回一個隨機元素。 我還需要保存列表中的所有元素以及在上下文中選擇的元素,然后在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 panel.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類對象的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
對象,您可以在其中使用此信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.