【问题标题】:Return JSON response without redirecting返回 JSON 响应而不重定向
【发布时间】:2019-02-04 18:10:20
【问题描述】:

我是 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'),

【问题讨论】:

  • 你使用什么样的视图?你能从 urls.py、views.py 和 html 模板中添加一些代码吗? stackoverflow.com/help/how-to-ask
  • @Andy 我刚刚用你问我的信息更新了我的问题,提前谢谢
  • 你不能在 Django 2+ 中使用带有正则表达式的路径,你需要导入 re_path 然后你可以使用 re_path(r'#/', views.myfunction, name="myfunction")
  • @ThomasMyers 嗨,我写的路线可能是错误的,所以不要介意,我唯一需要做的就是向客户端发送一个 Json 文件并用一些 js 更改一些 html 内容,但是每次我使用 JsonResponse 时,由于我的 urls.py 配置,它都会重定向
  • 它也重定向了什么网址?

标签: json ajax django


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    首先,您的代码中没有 AJAX。 &lt;a href="{% url 'polls:myfunction' %}"&gt;doFunction&lt;/a&gt; 将重定向到一个全新的页面。 其次,您在 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>
    

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-04
      相关资源
      最近更新 更多