Как убедиться, что django обслуживает шаблон в новой вкладке после обработки параметров запроса post? - PullRequest
0 голосов
/ 27 апреля 2019

В моем html-файле есть кнопка, которая при щелчке выполняет некоторые вычисления и post вызывает один из моих API с некоторыми параметрами, а затем из django Я извлекаю параметры и помещаю их в определенные заполнителишаблон и сделать шаблон.

Проблема в том, что я вижу, что шаблон отображается (если я проверяю раздел 'network' в Google inspect element), но я ничего не вижу на странице.Я ожидаю, что шаблон будет отображен на новой вкладке со значениями, которые я выбрал из параметров post, помещенных в соответствующие заполнители в шаблоне.

Вот что я отправляю через ajax post (я использую angular js в моем проекте, но я также могу сделать это с обычным js)

var toSend = {
            "user": username,
            "password": password,
            "text": text
            "context": $scope.newContext,
    }


$http({
          method: 'POST',
          url: '/correction',
          data: toSend
        }).
        then(function(response) {
          console.log(response.data);
  }) 

Вот моя django функция, определенная для API, который получает post запрос

@csrf_exempt
def get_correction(request):
        if request.method == 'POST':
                context = {}
                try:
                        print("recieved request")
                        user_request = json.loads(request.body.decode('utf-8'))
                        '''
                        some logic I use to check given the 
                        username and password, whether it is a 
                        valid user or not
                        '''
                        text_header = user_request.get("text")
                        userid = user_request.get("user")

                        context["userid"] = userid
                        context["text_header"] = text_header

                except Exception as e:
                        print(e)

                return render(request, 'correction_page.html', context)

Здесь я сохраняю текст и пользователя в словаре context для отправки вместе с correction_page.html.

Вот как выглядит моя страница коррекции

<!DOCTYPE html>
{% load static %}
<html>
<head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
        <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">


</head>
<body>
        <h1>Welcome!</h1>
        <span> {{text_header}} </span>

<script type="text/javascript" src="{% static 'js/fetch_info.js' %}"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<!-- <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> -->
</body>
</html>

Здесьtext_header заполнитель действительно получает значение (как я вижу в Google chrome разделе сети в элементе inspect.)

Но в пользовательском интерфейсе я не вижу, чтобы что-то происходило.Я надеялся, что шаблон будет отображаться на новой вкладке, но ничего не происходит.

Что я делаю не так?

1 Ответ

0 голосов
/ 28 апреля 2019

Вот мое предложение:

Django на стороне сервера, открытие в новой вкладке на стороне клиента.Таким образом, вы не сможете открыть новую вкладку только по ответу сервера.Вам нужно обработать его на стороне клиента, то есть angularJS

Выполнить вызов $http, и после его разрешения открыть новую вкладку и перенаправить на /correction/data, который должен предоставить все эти данные и вернуть template с необходимыми данными, которые были сохранены после выполнения POST в /correction

что-то вроде:

$http({
      method: 'POST',
      url: '/correction',
      data: toSend
    }).
    then(function(response) {
       $window.open(url , '_blank');
}) 

, и это url будет означать /correction/data, и выполучу ваши данные

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