javascript - 有没有办法在不刷新页面的情况下调用 django 函数
问题描述
我正在尝试创建一个在 django 中生成随机值的函数,以便可以记录它,然后将其传递到一个 javascript 文件中,在该文件中它旋转一个轮子以显示动画,然后在动画结束后放置 10 个硬币进入配置文件帐户。问题是当我使用视图函数时,返回类型是页面重定向,所以动画被切断了。是否有一种 django 函数可以在没有重定向的情况下解析值,类似于 C++ void 函数?
这是我到目前为止的代码views.py
@login_required
def Red(request):
profile = get_object_or_404(Profile, user=request.user)
profile.coins += 10
profile.save(update_fields=['coins'])
random = random.randrange(11)
return render(request, "bets/bets.html", {'random' : random})
型材型号:
from django.db import models
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
coins = models.DecimalField(max_digits=9, decimal_places=2, default=0.00)
def __str__(self):
# @ts-ignore
return f'{self.user.username} Profile'
以及其中包含 javascript 的 html
<div class="Container">
<div class="inputContainer" blank="False">
{% csrf_token %}
<span class="coinContainer2"><i class="fas fa-coins"></i></span>
<input name="amount" class="amountInput" type="number" min="0.01" placeholder="Enter Amount">
<div class="sideContainer" id="buttonNav">
<span class="redButton"><button type="button" class="btn btn-danger" id="buttonRed" name = "redButton"> <a href="{% url 'redButton' %}" style="text-decoration: none; color: white;"> Red </a> </button></span>
</div>
</div>
</div>
</div>
<script>
var itemSelected = 0;
var stoping = false;
jQuery(function ($) {
var $owl = $('.owl-carousel');
// Initialize Owl
$('.owl-carousel').owlCarousel({
center: true,
loop: true,
margin: 10,
nav: false,
mouseDrag: false,
touchDrag: false,
pullDrag: false,
dots: false,
responsive: {
0: {
items: 3
},
600: {
items: 3
},
1000: {
items: 7
}
}
});
// Click in button Jump
$('#buttonNav').click(function (e) {
e.preventDefault();
stoping = false;
// Random between 1 and 10
//var itemSelected = Math.floor((Math.random() * 11));
itemSelected = "{{ winner }}";
var $jump = $(this);
//$jump.html('Jumping ...');
$jump.attr('disabled', 'disabled');
// Trigger autoplay owl
$owl.trigger('play.owl.autoplay', [100]);
// Slow speed by step
setTimeout(slowSpeed, 2000, $owl, 200);
setTimeout(slowSpeed, 4000, $owl, 250);
setTimeout(slowSpeed, 5000, $owl, 300);
setTimeout(stopAutoplay, 6000);
return false;
});
// Event changed Owl
$owl.on('changed.owl.carousel', function (e) {
if (stoping) {
// Examine only if roulette stop
var index = e.item.index;
var element = $(e.target).find(".owl-item").eq(index).find('.element-roulette');
var item = element.data('item');
if (item == itemSelected) {
// If element equals to random, stop roulette
$owl.trigger('stop.owl.autoplay');
//$('#buttonNav').html('Jump');
$('#buttonNav').removeAttr('disabled');
}
}
});
// Showcase
slowSpeed($owl, 1400);
});
/**
* Reduce speed roulette
* @param {type} $owl
* @param {type} speed
* @returns {undefined}
*/
function slowSpeed($owl, speed) {
$owl.trigger('play.owl.autoplay', [speed]);
}
/**
* Stop autoplay roulette
* @returns {undefined}
*/
function stopAutoplay() {
stoping = true;
}
</script>
谢谢!
解决方案
我相信只有通过 JavaScript 或 jquery 才有可能。
https://api.jquery.com/jQuery.get/
您的函数的 URL。
Idk 知道烧瓶与 django 有多么不同,但我一周前使用本教程自己解决了这个问题。 https://flask.palletsprojects.com/en/1.1.x/patterns/jquery/
推荐阅读
- javascript - 多步形式的 Javascript 验证
- javascript - 生成具有要求的随机密码
- java - 确保已安装 Java 并在 Amazon SageMaker Jupyter Notebook 中为“java”设置 PATH
- flutter - 除非我在 initState() 函数中放置断点,否则 Admob 横幅不会显示
- java - JDK 中的 SSL 证书执行从 1.8.0_51 升级到 1.8.0_202
- python - 如何提取具有相同名称的 XML 标记/实体?
- flutter - 收到 Nonce 后如何进行 Braintree 交易?
- arrays - 我收到一个错误,指出 C 程序中的类型冲突
- html - 如何在 Angular 项目中读取/显示 ArrayObject?
- javascript - 具有 div 样式更改的 GTM 元素可见性触发器