有没有一种方法可以在不刷新页面的情况下调用Django函数

2024-04-29 11:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个函数,该函数在django中生成一个随机值,这样就可以记录该值,然后将其传递到一个javascript文件中,在该文件中旋转一个轮子以显示动画,然后在动画结束后将10个硬币放入profiles帐户。问题是,当我使用view函数时,返回类型是页面重定向,因此动画被切断。是否有一种Django函数可以在没有重定向的值解析,类似于C++空余函数?

这是我目前掌握的代码 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>

谢谢


Tags: 函数divfalsemodelsvarfunctionrandomitem