Django: промежуточное ПО конфигурации "константы" - PullRequest
0 голосов
/ 23 февраля 2020

Я пишу приложение, в котором доступны два языка (английский sh и испанский sh). Я решил решить эту проблему, используя методы для каждой метки, которые я буду отображать в шаблонах, например:

constants.py:

def c_accept(language):
    if language == 0:
        return 'Aceptar'
    elif language == 1 or language is None:
        return 'Accept'

def c_welcome_back(language):
    if language == 0:
        return 'Bienvenido otra vez'
    elif language == 1 or language is None:
        return 'Welcome back'

Таким образом, я могу используйте c_accept вместо литералов String, передавая язык, который выбрал пользователь (сохраненный в request.session ['language']).

Пока все хорошо, пока я не обнаружил, что у меня слишком много "констант", и это приносит проблему. Если я передам все константы в каждом представлении, это будет много мусора для каждого запроса, и если я передам только те «константы», которые я буду использовать в этом представлении, потребуется много времени, чтобы быть внимательным, какая константа I пользуюсь а какой нет. Поэтому я понял, что могу создать промежуточное ПО, которое загружает все моих констант, но только один раз , как документация Django объясняет в промежуточном программном обеспечении на основе классов:

def __init__(self, get_response):
    self.get_response = get_response
    # One-time configuration and initialization. **(I want to load all my constants here)**

def __call__(self, request):
    # Code to be executed for each request before
    # the view (and later middleware) are called. **(And then passing this dictionary already initialized).**

    response = self.get_response(request)

    # Code to be executed for each request/response after
    # the view is called.

    return response

Но я не могу добиться этого. До сих пор я пробовал что-то вроде этого:

middleware.py:

from .constants import *

class Constants:
    const = {}

    def __init__(self, get_response, language):
        self.get_response = get_response
        self.const = {
            'c_accept': c_accept(language),
            **all my other constants
        }

    def __call__(self, request):
        return self.const

Как я мог сделать что-то подобное? Я пока не понимаю, как обращаться с таким промежуточным ПО (это первое, что я делаю).

...