首页 > 解决方案 > 有没有办法在不刷新页面的情况下调用 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>

谢谢!

标签: javascriptpythonhtmldjangoview

解决方案


我相信只有通过 JavaScript 或 jquery 才有可能。

https://api.jquery.com/jQuery.get/

您的函数的 URL。

Idk 知道烧瓶与 django 有多么不同,但我一周前使用本教程自己解决了这个问题。 https://flask.palletsprojects.com/en/1.1.x/patterns/jquery/


推荐阅读