Конструктор форм трясогузки: как сохранить параметр строки запроса / URL со страницы формы для соответствующей целевой страницы?

В проекте трясогузки с конструктором форм трясогузки [1] реализация по умолчанию перенаправляет пользователя после успешной отправки формы на целевую страницу [2].

В моей несколько настроенной реализации моей страницы формы (AbstractEmailForm) я использую строку запроса (здесь: ?embed=true), чтобы настроить отображаемую страницу / макет для встраивания (через iFrame). Это работает.

Но после отправки формы на такой странице вызывается метод render_landing_page [3] и отображает целевую страницу для этой формы. Но моя строка запроса потеряна. Этот метод можно переопределить:

class FormPage(AbstractEmailForm):

    def render_landing_page(self, request, form_submission=None, *args, **kwargs):
        """
        Renders the landing page.
        You can override this method to return a different HttpResponse as
        landing page. E.g. you could return a redirect to a separate page.
        """
        
        # !!!Pseudocode (next line):
        # How to get the query string from the form page?
        query_string_from_formpage = get_query_string_from_formpage_request()

        context = self.get_context(request)
        context['form_submission'] = form_submission

        response = TemplateResponse(
            request,
            self.get_landing_page_template(request),
            context
        )

        # !!! Pseudocode (next line):
        # How to pass the captured query string to 
        # this response object?
        response = response + query_string_from_formpage

        return response

Как сохранить строки запроса со страницы формы на соответствующей целевой странице?

[1] https://docs.wagtail.io/en/stable/reference/contrib/forms/index.html
[2] https://docs.wagtail.io/en/stable/reference/contrib/forms/customisation.html#custom-landing-page-redirect
[3]


person tombreit    schedule 23.04.2021    source источник


Ответы (1)


Хорошо, я нашел решение: проверьте http-референт объекта запроса django и действуйте в соответствии с этим.

В моем случае я добавил переменную в контекст render_landing_page TemplateResponse:


class FormPage(*various mixins*, AbstractEmailForm):
    def render_landing_page(self, request, form_submission=None, *args, **kwargs):
        referer_url = request.META.get('HTTP_REFERER')
        parsed_url = urlparse(referer_url)
        embed = parse_qs(parsed_url.query).get('embed')

        context = self.get_context(request)
        context.update({
            "form_submission": form_submission,
            "embed": embed,
        })
        ...
person tombreit    schedule 25.05.2021