在模板中传达AJAX和Django View

时间:2017-06-30 00:59:30

标签: jquery python ajax django

您好我正在尝试将我的视图传达给我的ajax脚本。

  

urls.py

from .views import (
    video_testimonial,
)
urlpatterns = [
   url(r'^(?P<id>\d+)/video_testimonial/$', video_testimonial, name='video_testimonial'),
]

所以基本上它需要一个整数,以便url可以访问。

例如 0 / video_testimonial /

这是我的

  

views.py

def video_testimonial(request, id):
    testimonial = Testimonial.objects.filter(id=id)

    if request.is_ajax():
        context = {
            'testimonial': testimonial,
        }
        return JsonResponse(context)
    else:
        raise Http404

我的html中的脚本(内部脚本):

  

presentation.html

function showVideoTestimonial() {
        var id = parseInt($('.carousel-inner a').attr('id'));
        $.ajax({
            url: id +'/video_testimonial/',
            success: function (data) {
                console.log(data.testimonial);
                $('.carousel-inner a').click(function () {
                    console.log(id);
                });
            }
        })
    }
    showVideoTestimonial();
  

url:id +'/ video_testimonial /',我错过了访问网址的内容吗?谢谢你回复

修改 错误显示: enter image description here

1 个答案:

答案 0 :(得分:1)

不应使用.filter,而应使用.get,因为它应该返回一个对象。该错误表明QuerySet不是Json可序列化的,这是非常明显的。你需要的是将对象转换为dict。这可以通过

轻松完成

testimonial.__dict__

确保testimonial是模型对象而不是查询集。

有关如何将对象转换为dict的更多详细信息,请查看https://stackoverflow.com/a/29088221/4117381

旁注:使用完整的URL创建json请求总是更好。如果您使用的是Django模板,则可以使用{% url 'video_testimonial' id%}