Как в Django View вызвать JavaScript функцию?
У меня есть view-функция, и в зависимости от определенных условий она либо что-то делает, либо запускает js функцию. Вот моя view:
def down_rating_article(request, article_id):
if Article.objects.filter(pk=article_id).first() in request.user.article_left_reaction.all():
'здесь нужно вызвать js'
else:
article = Article.objects.filter(pk=article_id).first()
Article.objects.filter(pk=article_id).first().left_reaction.add(request.user)
new_rating = article.rating - 1
Article.objects.filter(pk=article_id).update(rating=new_rating)
return redirect('article', article_id=article.pk)
Вопрос в том, как это сделать. В js я полный ноль, слышала про аякс, но не совсем понимаю, как с ним работать. Попыталась написать нужный мне js код. Вот он:
function change_rating_failed(object) {
$.ajax({
success: alert(`Вы уже поставили оценку ${object}!`)
});
};
И теперь я в тупике, вообще не понимаю, что делать дальше
Ответы (1 шт):
Нельзя наверняка сказать, как в данном случае сделать наиболее оптимально из-за недостатка подробностей и кода.
Вполне возможно, что так делать вообще не стоит, и лучше использовать другой подход.
Но один из вариантов решения этой проблемы - это добавлять контекст в шаблон. Затем JS будет считывать этот контекст. Если контекст имеется - JS срабатывает, иначе нет.
Пример:
urls.py
:
from app.views import test
urlpatterns = [
path('test', test),
]
views.py
:
import random
def test(request, *args, **kwargs):
template_context = {}
if random.choice([True, False]):
template_context.update({"test_value": "hello_world"})
return render(
request,
"test.html",
context=template_context
)
templates/test.html
:
<!DOCTYPE html>
<html lang="en">
<head>
{{ test_value|json_script:"test-data" }}
</head>
<body>
</body>
<script>
if (JSON.parse(document.getElementById('test-data').textContent)) {
alert('hello!')
}
</script>
</html>
При таких условиях JS на странице будет выполняться по случайному условию (random.choice
).
Если контекст имеется - alert
отобразится.