Как вызвать функцию Django при нажатии кнопки?
Я пытаюсь написать приложение Django, и я застрял в том, как я могу вызвать функцию представления при нажатии кнопки.
В моем шаблоне у меня есть кнопка ссылки, как показано ниже, при нажатии на которую вы переходите на другую веб-страницу:
<a target="_blank" href="{{ column_3_item.link_for_item }}">Check It Out</a>
Когда кнопка нажата, я также хочу вызвать функцию просмотра Django (наряду с перенаправлением на целевой веб-сайт). Функция просмотра увеличивает значение в базе данных, в которой хранится количество нажатий кнопки.
column_3_item.link_for_item
представляет собой ссылку на внешний веб-сайт (например, www.google.com). Прямо сейчас, когда эта кнопка нажата, она открывает новое окно, которое приводит вас на сайт Google.
Я хотел бы также вызвать функцию просмотра Django, когда нажата кнопка, которая обновляет базу данных без обновления страницы. Как мне этого добиться?
Ответы
Ответ 1
- это чистый, минималистичный подход. Я использую JQuery, но вы можете использовать любую библиотеку (или даже без каких-либо библиотек).
<html>
<head>
<title>An example</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function call_counter(url, pk) {
window.open(url);
$.get('YOUR_VIEW_HERE/'+pk+'/', function (data) {
alert("counter updated!");
});
}
</script>
</head>
<body>
<button onclick="call_counter('http://www.google.com', 12345);">
I update object 12345
</button>
<button onclick="call_counter('http://www.yahoo.com', 999);">
I update object 999
</button>
</body>
</html>
Альтернативный подход
Вместо размещения кода JavaScript вы можете изменить свою ссылку следующим образом:
<a target="_blank"
class="btn btn-info pull-right"
href="{% url YOUR_VIEW column_3_item.pk %}/?next={{column_3_item.link_for_item|urlencode:''}}">
Check It Out
</a>
и в views.py
:
def YOUR_VIEW_DEF(request, pk):
YOUR_OBJECT.objects.filter(pk=pk).update(views=F('views')+1)
return HttpResponseRedirect(request.GET.get('next')))
Ответ 2
Следующий ответ может быть полезен для первой части вашего вопроса:
Django: Как я могу вызвать функцию просмотра из шаблона?
Ответ 3
Есть 2 возможных решения, которые я лично использую
1.Без использования формы
<button type="submit" value={{excel_path}} onclick="location.href='{% url 'downloadexcel' %}'" name='mybtn2'>Download Excel file</button>
2.Использование формы
<form action="{% url 'downloadexcel' %}" method="post">
{% csrf_token %}
<button type="submit" name='mybtn2' value={{excel_path}}>Download results in Excel</button>
</form>
Где url.py должен иметь это
path('excel/',views1.downloadexcel,name="downloadexcel"),