【问题标题】:Dynamic GET Request with Ajax and Django使用 Ajax 和 Django 的动态 GET 请求
【发布时间】:2018-02-16 13:44:15
【问题描述】:

我对使用 Ajax 还很陌生,但是我已经使用 Django 有一段时间了。

我想知道如何动态提交一个表单——无需刷新页面——将这个新的“参数”附加到 URL 并返回一些更新的数据。例如,如果我更改名为最高价格的值并单击“应用”,那么这会将“&max_price=some_new_value”添加到 URL 并返回带有最高价格过滤器的 Django 查询集。

我已经可以这样开始了……

$('.filter-ul-opt-change-apply').click(function(){
    $.get(...{
        ...
    })
})

虽然jQuery documentation 指定像ajax/test.html 这样的URL 作为参数传递给get() 方法,但我不确定这将如何与Django 视图一起使用以检索对象。

views.py:

def generic_view(request):
    objs = Objects.objects.filter(...parameters from updated url go here...)
    return render(request, 'generic-view.html', {'objs':objs})

任何关于为此目的使用 Django 和 Ajax 的想法都会非常有用!

谢谢!

【问题讨论】:

  • 它需要在 URL 上作为 get 吗?不能是帖子吗?
  • 为什么它需要在 URL 中?
  • @DanielRoseman 这样您就可以将该 URL 链接到其他人,当他们访问该链接时,他们将看到已应用过滤器的对象列表

标签: python jquery ajax django


【解决方案1】:

你可以像这样使用 ajax:

$.ajax({
    type : "GET",
    dataType : yourDataType,
    data : {
     'max_price'=some_new_value
    }
    url : theUrlYouMappedServerSide,
    success : function(response) {
    }
});

在你的 .py 中你应该有类似的东西:

from django.contrib.auth.models import User
from django.http import JsonResponse

def yourFunc(request):
    max_price= request.GET.get('max_price', None)
    //do some stuff
    data = {
        // your stuff from serverside
    }
    return HttpResponse(data)

你应该有一个视野:

from django.conf.urls import url
from core import views

urlpatterns = [
url(r'^theUrlYouMappedServerSide/$', views.yourFunc, name='yourFunc')
]

你只需要根据你的需要使用不同于HttpResponse(data)的东西

【讨论】:

  • 如果指定的 url 与 'yourView' 类相关,Ajax 方法如何访问 'yourFunc' 方法?只是一头雾水!
  • 好吧,作为表单的动作对吧?例如action='specified_url'
  • 要么硬编码表单中的函数,要么使用 viewroute url(r'^theUrlYouMappedServerSide/$', views.yourFunc, name='yourFunc')
  • 如果你使用表单,你的ajax url必须是:url: form.attr("data-validate")和表单:<form method="get" data-validate="{% url 'yourFunc' %}">
【解决方案2】:

AJAX 通用请求:

$.ajax({
        type: "GET", // or POST
        url: YOUR_ENDPOINT,
        data : YOUR_GET_PARAMETERS,
        success: function(response) {
             // success callback, update your html
        }, 
        error: function(response) {
            // error handling
        }
    }); 

在 django 端使用 request.GET 处理您的参数

【讨论】:

  • 谢谢!数据部分是字符串列表还是变量列表?假设我有参数 min_price、max_price 和 category - 我会将其写为 data:'min_price,max_price,category' 等还是不同的?
  • 应该是JS对象{'min_price': 0, 'max_price': ..., 'category': ..},见api.jquery.com/jquery.ajax
猜你喜欢
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-06-18
  • 2020-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多