Изменение пользовательского тега шаблона перед вызовом - PullRequest
0 голосов
/ 08 ноября 2011

Я модифицировал этот проект Django с открытым исходным кодом для собственного использования. У них есть этот собственный пользовательский тег шаблона, и в функции рендеринга узла они имеют что-то вроде следующего:

        plate = resolve_variable(self.plate, context)
        context.push()
        context['self'] = plate
        template = Template(f(str))
        result = template.render(context)
        context.pop()
        return result

Есть несколько разных версий этого пользовательского тега, которые я хотел бы создать, но на самом деле они будут отличаться только в функции f, которая вызывается выше. Таким образом, вместо того, чтобы просто копировать весь код тега несколько раз, я могу попробовать установить f в другое значение в функции представления прямо перед рендерингом шаблона, использующего этот тег. Но это не работает из-за процесса компиляции шаблона, который, по-видимому, смотрит только на содержимое самого исходного файла тега и не учитывает динамические изменения в нем (например, изменение f).

Итак, как мне это сделать - каким-то образом изменить f на ходу снаружи, а затем вызвать тег.

1 Ответ

0 голосов
/ 08 ноября 2011

Что я действительно хочу сделать, так это иметь необязательный параметр для тега шаблона, указывающий альтернативную функцию, и, если она не предоставлена, используется функция по умолчанию - ЗА ИСКЛЮЧЕНИЕМ, если пользовательский тег вызывается рекурсивно, когда предоставляется вызов верхнего уровняэто необязательный параметр, в этом случае вызов нижнего уровня должен использовать ту же функцию.Итак, я думаю, что я могу просто установить переменную класса f в классе Node для новой функции, если она предоставлена ​​в теге, поэтому рекурсивные вызовы Nodeclass будут использовать ее.И затем на верхнем уровне f возвращается в нуль в методе __del__ (деструктор) узла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...