Django Class Based View - Как получить доступ к POST данным вне метода post()

У меня есть CBV, основанный на TemplateView
. У него есть метод post(self) для доступа к пользовательскому вводу.
Также у него есть свойство template_name, которое должно быть заполнено данными из post().
Никакие модели или формы Django здесь не используются.

Попытка извлечения данных в рамках метода post:

# views.py
class ReturnCustomTemplateView(TemplateView):

    def post(self, *args, **kwargs):
        chosen_tmplt_nm = self.request.POST.get('tmplt_name')
        print(chosen_tmplt_nm)  # correct value.
        # how do I use it outside this method? (like bellow)    

    template_name = chosen_tmplt_nm

... или есть другой способ получить данные из request.POST без def post()?

Заранее спасибо!

Вы можете переопределить метод get_template_names() [Django-doc], который возвращает итерабельность (например, список) имен шаблонов для поиска при определении имени шаблона, так:

class ReturnCustomTemplateView(TemplateView):

    def get_template_names(self):
        return [self.request.POST.get('tmplt_name')]

    def post(self, *args, **kwargs):
        return self.get(*args, **kwargs)

Однако я бы посоветовал быть осторожным с этим: POST-запрос может быть подделан, поэтому хакер может сделать POST-запрос с другим именем шаблона и таким образом попытаться получить, например, содержимое файла settings.py или другого файла, содержащего конфиденциальные данные.

Вернуться на верх