Mam problemy z ustawieniem zmiennej w jednej z moich klas oprogramowania pośredniego, do której następnie dostęp będę mógł uzyskać w warstwie szablonów.Ustawianie zmiennej w oprogramowaniu pośrednim dostępnej w szablonie
Podstawowy układ jest taki:
class TheMiddleware(object):
def __init__(self, etc):
stuff...
def process_response(self, request, response):
request.my_var = "whatever"
return response
Następnie na matrycę do innego widoku mam:
{% custom_tag arg_a %}
Który jest szablon, który powinien zwrócić zmienną z wniosku:
@register.simple_tag
def custom_tag(arg_a):
return threading.currentThread().request.my_var
to uwagę błędy z „Caught AttributeError whil e rendering: obiekt "WSGIRequest" nie ma atrybutu "my_var" "
Myślałem, że może to być sposób, w jaki uzyskiwałem dostęp do żądania w tagu szablonu. Dlatego dodałem django.core.context_processors.request do mojego TEMPLATE_CONTEXT_PROCESSORS, jak w This question i próbowałem przekazać obiekt żądania do tagu, 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 żądania. Czy można przypisać zmienną do obiektu żądania i wybrać tę zmienną w kilku widokach? Myślałem, że obiekt żądania został przekazany przez widoki, ale wydaje się, że zamiast tego generowana jest nowa instancja.
Jeśli tak, to w jaki sposób przechowuje się przechowywanie zmiennej globalnej w oprogramowaniu pośredniczącym, które można następnie uzyskać dostęp z dowolnego punktu w aplikacji, czy to w widoku lub szablonu?
Aktualizacja:
wyjaśnić zamieszanie (czy kopalnia lub inni nie jestem pewien!) Jestem nie próbuje ustawić zmienną żądania w middleware process_response z widoku, a następnie podnieś go w szablonie tego samego widoku. Rozumiem, że to nie zadziała, ponieważ szablon został przetworzony przed zapisaniem zmiennej. (Jest to celowe działanie z mojej strony).
Mam dwa widoki, View1 i view2 widok trzeba dekorator, który powoduje middleware ustawić zmienną we wniosku. Jest to szablon view2, który pojawia się po ustawieniu zmiennej, że chcę uzyskać dostęp do zmiennej.
aktualizowane na pytanie, mój wybór process_response było celowe – PT114
@ PT114, to znaczy, że są 2 oddzielne wnioski napływające na 2 różnych adresów URL/poglądów? – Rohan
Tak. Sądziłem, że żądanie to trwało przez cały czas wraz z dowolnymi zmiennymi, ale wygląda na to, że tak nie jest. W takim razie, jak byś postąpiła przy przechowywaniu zmiennej, która mogłaby być dostępna globalnie? – PT114