Ustawianie zmiennej w oprogramowaniu pośrednim, do której można uzyskać dostęp w szablonie
Wydaje mi się, że mam trudności z ustawieniem zmiennej w jednej z moich klas oprogramowania pośredniego, do której mogę uzyskać dostęp w warstwie szablonu.
Podstawowy układ to:
class TheMiddleware(object):
def __init__(self, etc):
stuff...
def process_response(self, request, response):
request.my_var = "whatever"
return response
Następnie w szablonie dla innego widoku mam:
{% custom_tag arg_a %}
Który jest tagiem szablonu, który powinien zwrócić zmienną z żądania:
@register.simple_tag
def custom_tag(arg_a):
return threading.currentThread().request.my_var
To powoduje błędy„Złapany atrybut AttributeError podczas renderowania: obiekt„ WSGIRequest ”nie ma atrybutu„ my_var ”
Pomyślałem, że to może być sposób na uzyskanie dostępu do żądania w tagu szablonu. Więc dodałem django.core.context_processors.request do mojego TEMPLATE_CONTEXT_PROCESSORS jak wTo pytanie i próbował przekazać obiekt żądania do znacznika, a następnie uzyskać dostęp do żądania bezpośrednio z szablonu, ale bez powodzenia.
Myślę, że brakuje mi zrozumienia, jak działają obiekty żądań. Czy możliwe jest przypisanie zmiennej do obiektu żądania i wybranie tej zmiennej w kilku widokach? Pomyślałem, że obiekt żądania został przekazany przez widoki, ale wydaje się, że zamiast tego generowana jest nowa instancja.
Jeśli tak jest, w jaki sposób przechowałbyś zmienną globalną w ramach oprogramowania pośredniego, do której mógłbyś uzyskać dostęp z dowolnego miejsca w aplikacji, czy to w widoku, czy w szablonie?
Aktualizacja:
Aby wyjaśnić zamieszanie (czy moje, czy inne, nie jestem pewien!) Jestemnie próbując ustawić zmienną żądania w oprogramowaniu pośrednim process_response widoku, a następnie odebrać ją w szablonietego samego widoku. Rozumiem, że to nie zadziałałoby, ponieważ szablon został przetworzony przed zapisaniem zmiennej. (To jest celowe działanie z mojej strony).
Mam dwa widoki,widok1 iwidok2 widok ma dekorator, który powoduje, że oprogramowanie pośrednie ustawia zmienną w żądaniu. Jest to szablon view2, który pojawia się po ustawieniu zmiennej, którą chcę uzyskać dostęp do zmiennej.