簡體   English   中英

如何在Django模板標簽中設置全局可訪問的上下文變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM