Рендеринг при нажатии кнопки в Django - PullRequest
0 голосов
/ 22 января 2020

У меня есть простой HTML шаблон в приложении django:

...
{% block analyze %}
    <br>
    <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <button type="submit" name="run_script">Run Script</button>
    </form>
    {% if results %}
        <br>
        <a href="data:text/plain;charset=utf-8, {{results}}" download="results.json">download</a>
    {% endif %}
{% endblock %}
...

Поэтому, когда я нажимаю sh кнопку, скрипт в views.py должен активироваться:

def analysis(request):
    if request.method == 'POST' and 'run_script' in request.POST:
        ...
        # I get the variable finalresults here
        return render(request, 'template.html', {
            'results' : finalresults,
        })
    #in case the button is not pushed, I either want to render to 
    #the template. But without running the script
    return render(request, 'template.html')

Первый раз, когда я туда захожу, все работает. Я пу sh кнопку, и он запускает мой сценарий. Проблема в том, что когда я перезагружаю страницу, она автоматически запускает скрипт, не нажимая кнопку.

Я просто хочу, чтобы скрипт запускался при нажатии кнопки, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Когда вы перезагрузите страницу, я думаю, нажав кнопку перезагрузки в браузере, запрос снова будет отправлен на сервер django, если вы попытаетесь перезагрузить URL-адрес и не обновлять его, нажав кнопку перезагрузки, он будет отлично работает Вы можете использовать ajax onclick () на кнопке для запуска запроса на django вместо метода POST. Это предотвратит перезагрузку страницы.

Вы можете воспользоваться этой ссылкой https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html

0 голосов
/ 22 января 2020

Это происходит потому, что при перезагрузке страницы браузер запоминает последний метод HTTP (POST), и вы отправляете тот же запрос, а затем отправляете кнопкой.

Для решения этой проблемы вы должны вернуть перенаправление на эту страницу вместо рендера. .

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