Django view / html input - Могу ли я принудительно запустить обновление, используя submit, если обновление формы отсутствует? - PullRequest
0 голосов
/ 03 февраля 2020

Можно ли принудительно обновить sh шаблона, используя форму html из самой формы, когда, по-видимому, обновления формы отсутствуют? Вот простой пример того, что я считал допустимым вариантом использования.

Представление генерирует случайное число: -

def test_random_view(request):
    varid=randint(1,1000)
    context={
        "Randomid": varid
    }
    return render(request ,'test_random.html', {'context': context})

Простая страница должна генерировать это случайное число: -

This doesn't work<br><br>
Here is a random number: <br>
{{ context.Randomid }}
<form method='get' action=''>
    <input type="text" name="input"  value="Here is an empty field"><br>
    <input type="submit" value="Update the random number"><br>
</form>

Но при нажатии на кнопку отправки случайное число не обновится. Я предполагаю, что это потому, что он распознает, что в форму не было внесено никаких обновлений, поэтому он не возвращается обратно в представление для генерирования нового случайного числа. Вы можете «обмануть» его, передав случайное число в текстовый ввод: -

This sort of works<br><br>
Here is a random number: <br>
<form method='get' action=''>
    <input type="text" name="input"  value={{ context.Randomid }}><br>
    <input type="submit" value="Update the random number"><br>
</form>

Но для этого текстового поля нет никаких причин, кроме как заставить форму распознавать обновление и передавать обратно в представление.

Какой лучший способ сделать это?

Должен ли я создавать форму в forms.py, а затем создавать экземпляр формы в представлении? Если да, то как я могу убедиться, что страница будет обновляться sh?

Можно ли это сделать соответствующим образом на самой странице?

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

Спасибо за помощь

Фил

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Обычно Django не кэширует ваши просмотры, и любой запрос GET должен возвращать свободный sh ответ. По какой-то причине кажется, что вы видите кешированный ответ. Это может быть ваш браузер или сервер между ними (nginx?).

Если вы хотите предотвратить кэширование HTTP-ответа Django, проще всего сделать это, декорировав его декоратором never_cache: https://docs.djangoproject.com/en/3.0/topics/http/decorators/#django .views.decorators.cache .never_cache

0 голосов
/ 03 февраля 2020

Если вы хотите использовать refre sh на странице, вы можете просто использовать тег привязки со ссылкой, ведущей на эту страницу:

, если, например, ваш urls.py выглядит так: ...

path('random/', views.test_random_view, name='random'),

...

Ваш шаблон будет выглядеть так:

This doesn't work<br><br>
Here is a random number: <br>
{{ context.Randomid }}
<a href="{% url 'random' %}">Reset</a>
...