如何通过django项目中的ajax调用来调用python函数?

时间:2015-09-30 03:42:04

标签: django

我开始使用一个简单的网络应用程序,我试图调用python函数通过ajax调用呈现一个单独的视图。我想点击try按钮并渲染一个不同的html模板。现在它只显示来自我的ajax的错误消息,但我不知道什么可能破坏它。我只是需要有人指出我正确的方向..一些起点将非常感激。在此先感谢:)

我的项目urls.py看起来像这样

from django.conf.urls import include, url, patterns
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from SudokuProject import settings

urlpatterns = patterns('',
url(r'', include('SudokuApp.urls', namespace="Sudoku"))) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urlpatterns += staticfiles_urlpatterns()

我的应用urls.py

from django.conf.urls import include, url
from . import views

urlpatterns = [
    url(r'Home/', views.sudoku_home, name="home"),
    url(r'Solve/', views.sudoku_solve, name="solve")
]

Views.py

from django.shortcuts import render
from django_ajax.decorators import ajax

def sudoku_home(request):
    return render(request, 'SudokuHome.html')

@ajax
def sudoku_solve(request):
    return render(request, 'SudokuSolve.html')



$(document).ready(function(){
    $('#try').click(function() {
        alert('hi');
        $.ajax({
            url:"{% url 'Sudoku:solve' %}",
            type:"POST",
            success: function (data) {
                alert('woohoo success');
            },
            error: function(data) {
                alert("something's wrong");
            }
        })
    });
});

<body>
    Hello Welcome to Sudoku
    <button id="try">try me</button>
</body>

<script type="text/javascript" src="{% static 'js/jquery.js' %}" ></script>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

我相信你正在使用django-ajax库,而你已经安装了它。

根据django-ajax documentation,您必须返回字典:

@ajax
def my_view(request):
    c = 2 + 3
    return {'result': c}

# The result is send to the browser in the following way (JSON format)

{"status": 200, "statusText": "OK", "content": {"result": 5}}

所以你的函数应该返回这样的东西:

@ajax
def sudoku_solve(request):
    return { "message": "hello world!" }

您可以在前端使用此数据:

...
        success: function (data) {
            alert(data.content.message);
        },
...

答案 1 :(得分:0)

您需要渲染模板,然后将其作为字符串发回,如下所示:

Puma

在您的客户端:

from django.template.loader import render_to_string

def sodoku_solve(request):
    html = render_to_string('SodukuSolve.html')
    return {'html': html}