【问题标题】:Django: accept AJAX call and render response?Django:接受 AJAX 调用并呈现响应?
【发布时间】:2015-09-06 07:04:41
【问题描述】:

这是我的 javascript 代码:

function getCookie(name) {
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
            return cookieValue;
    };

    var csrftoken = getCookie('csrftoken');

    //Ajax call
    function csrfSafeMethod(method) {
    // these HTTP methods do not require CSRF protection
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
        }
        $.ajaxSetup({
            crossDomain: false, // obviates need for sameOrigin test
            beforeSend: function(xhr, settings) {
                if (!csrfSafeMethod(settings.type)) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                }
            }
    });

    $(".color_wheel").click(function() {
    $.ajax({
        url:'/',
        type: "POST",
        data: {num : level},
    });});

这是我的视图文件:

from django.shortcuts import render
from .models import Joke

# Create your views here.
def home_page(request):
    return render(request, 'home.html')

def joke_page(request):
    if request.POST:
        num = request.POST['num']     
        return render(request, 'joke.html', {'joke': Joke.find_joke(num)})

如您所见,我希望 Django 接受 AJAX 调用,获取给定的数字(num)并使用它来显示新页面。问题是,它不起作用......也许我做错了什么,也许整个事情都是错的......如果你知道怎么做,请帮忙。谢谢!

编辑:

urls.py

from django.conf.urls import url

from jokes import views

urlpatterns = [
    url(r'^$', views.home_page, name='home_page'),
    url(r'^(?P<joke_id>[0-9]+)/$', views.joke_page, name='joke_page'),
]

【问题讨论】:

  • ajax 无法渲染新的 html,你可以接受来自服务器的响应。
  • 您似乎只拥有所需代码的一半。 Ajax成功时调用的函数在哪里渲染接收到的数据?网址在哪里? /是映射到home_page还是joke_page?
  • @DanielRoseman 是否可以通过 ajax 渲染新的 html ?
  • 当然可以,如果你定义了一个在数据返回时执行的回调。该功能可以做任何你喜欢的事情。
  • 没关系,但是这里 OP 正在尝试发布一些数据,并在那里进行了一些过滤,并尝试通过呈现过滤后的值在同一请求中呈现新的 html。那可能吗?我只是怀疑,这就是为什么。

标签: jquery python ajax django call


【解决方案1】:

我认为这可以简单地使用 GET 请求来完成

$(".color_wheel").click(function() {
    window.location.href = "/"+devel,
})

在视图中

def joke_page(request, joke_id):
    return render(request, 'joke.html', {'joke': Joke.find_joke(joke_id)})

【讨论】:

  • 这似乎只是重新加载页面,但也许我在其他地方犯了一些错误。让我检查一下……
  • 你能把你的 urls.py 放上去吗?
  • 哦,我明白你在做什么,但事情是这样的:devel 和joke_id 不是一回事。 devel 只是一个帮助 Joke.find_joke 随机找到其他页面的数字...:P 我知道,这很奇怪,对不起...
  • 也许如果我创建另一个视图,例如 random_joke_page,接收像“?num=”这样的信息,然后使用正确的 id 重定向到 joke_page?这可能吗?
  • 试试看能不能
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 2013-04-13
  • 2021-04-09
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2021-05-11
  • 2016-12-19
相关资源
最近更新 更多