返回JSON响应而无需重定向

时间:2019-02-04 18:10:20

标签: json ajax django

我是django的新手,我试图在不进行重定向的情况下更新视图中的字段,我试图在调用视图函数时返回JSON文件,但是我似乎找不到解决方法因此无需重定向到某些网址。

我认为这可能与我的urls.py有关:... path('#',views.myFunction,name ='myFunctionName')。

我把djangoproject.com中出现的django教程搞糊涂了

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize }}</li
{% endfor %}
</ul>
<a href="{% url 'polls:detail' question.id %}">Vote again?</a>
<a href="{% url 'polls:myfunction' %}">doFunction</a>

我的视图功能如下:

def myfunction(request):
    return JsonResponse({'ayy':'lmao'})

和urls.py:

from django.urls import path


from . import views

app_name = 'polls'
urlpatterns = [
path('', views.IndexView.as_view(), name='index'),
path('<int:pk>/', views.DetailView.as_view(), name='detail'),
path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
path('<int:question_id>/vote/', views.vote, name='vote'),
path(r'#', views.myfunction, name='myfunction'),
path('form', views.FormView.as_view(), name='form'),

2 个答案:

答案 0 :(得分:0)

因此,最有可能发生的是Django URLS正在找到索引页面并重定向到该视图。 #磅或数字符号通常表示页面中的重定向。

答案 1 :(得分:0)

首先,您的代码中没有AJAX。 <a href="{% url 'polls:myfunction' %}">doFunction</a>将重定向到整个新页面。 其次,您到urls.py中的myfunction的路径不正确。

这是您可以做什么的一个例子。我也建议您阅读this。我使用JQuery,但随时可以适应您的喜好。

urls.py:

    #...
    path('ajax/domyfunction/', views.myfunction, name='myfunction')
]

html模板:

<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }} -- {{ choice.votes }} vote{{ choice.votes|pluralize}}</li
{% endfor %}
</ul>
<a href="{% url 'polls:detail' question.id %}">Vote again?</a>
<button id="b_function">doFunction</button>
<script>
$("#b_function").click(function () {
    $.ajax({
        url: '{% url "polls:myfunction" %}',
        dataType: 'json',
        success: function (data) {
            alert(data.ayy);
        }
    });
});
</script>