在django中通过url传递列表 [英] Passing a list through url in django

查看:111
本文介绍了在django中通过url传递列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过URL传递列表。但是当我试过,我有一些错误。那我该怎么办呢有人请帮助我..



这是我的观点

  def add_student(request):

如果request.method =='POST':
student_list = []
student_name = request.POST.getlist('student_name')
student_phone = request.POST.getlist('student_phone')

zipped = zip(student_name,student_phone)

for student_name,student_phone在压缩包中:

student_object =学生(
student_name = student_name,
student_phone = student_phone

student_object.save()

student_list.append(student_object.id )

return HttpResponseRedirect(reverse('students:view_students',args = student_list))
**#在上面的代码中,它抛出一些错误**
else:
return render(request,'students / add_student。 html')


def view_students(request,student_list = None)
如果student_list:
instances = Student.objects.filter(id__in = student_list)
else =
instance = Student.objects.filter()
context = {}
上下文['instances'] =实例

返回渲染(请求, 'students / view_all_student.html',上下文)

这是我的url:

  url(r'^ view-students /(?P< student_list> \w +)/ $',views.view_students,name ='view_students' ),

这是我收到的错误。



$ / $ / $ / $ /

使用参数'(14,15)'和关键字参数'{ }' 未找到。尝试了1种模式:[u'app / product / view-products /(?P< pd_list>。*)/ $']

这里(14,15)是列表项。



如果问题不正确。有人请纠正这个问题。

解决方案

如果你想做的是渲染一个列表,你应该这样做。 >

  def add_student(request):
如果request.method =='POST':
student_list = []
student_name = request.POST.getlist('student_name')
student_phone = request.POST.getlist('student_phone')

zipped = zip(student_name,student_phone)

为student_name,student_phone在压缩中:
student = Student.objects.create(student_name = student_name,
student_phone = student_phone)
student_list.append(student)

return render(request,'students / view_all_student.html',{'instances':student_list})
else:
return render(request,'students / add_student.html')

但是,您的问题似乎关注用户双重发布此请求。要解决这个问题,您可以将它们作为参数传递

  def add_student(request):
if request.method = ='POST':
student_list = []
student_name = request.POST.getlist('student_name')
student_phone = request.POST.getlist('student_phone')

zipped = zip(student_name,student_phone)

for student_name,student_phone在压缩中:
student = Student.objects.create(student_name = student_name,
student_phone = student_phone)
student_list.append(str(student.id))

redirect = HttpResponseRedirect(reverse('students:view_students'))
redirect ['Location'] + ='& ;'。join(['students = {}'。format(x)for x in student_list]))
return redirect
else:
return render(request,'students / add_student。 html')

def view_students(reques t):
students = request.GET.getlist('students')
如果学生:
students = [int(x)for x in students]
instances =学生。 objects.filter(id__in = students)


I want to pass a list through the url. But when i tried, i got some errors. So how can i do that. Somebody please help me..

this is my view

def add_student(request):

    if request.method == 'POST':
        student_list = []
        student_name = request.POST.getlist('student_name')
        student_phone = request.POST.getlist('student_phone')

        zipped = zip(student_name,student_phone)

        for student_name,student_phone in zipped:

            student_object = Student(
                                student_name=student_name,
                                student_phone=student_phone
                            )
            student_object.save()

            student_list.append(student_object.id)

        return HttpResponseRedirect(reverse('students:view_students', args=student_list))
**# in the above code it throwing some errors** 
    else:
        return render(request,'students/add_student.html')


def view_students(request,student_list=None):
    if student_list:
        instances = Student.objects.filter(id__in=student_list)
    else:
        instances = Student.objects.filter()
    context = {}
    context['instances'] = instances

    return render(request,'students/view_all_student.html',context)

this is my url :

url(r'^view-students/(?P<student_list>\w+)/$',views.view_students, name='view_students'),

this is the error i got.

NoReverseMatch at /app/product/add-product/

Reverse for 'view_products' with arguments '(14, 15)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'app/product/view-products/(?P<pd_list>.*)/$']

here (14,15) are the list items.

If the question is not correct. Somebody please correct the question.

解决方案

If all you want to do is render a list you should just do that.

def add_student(request):
    if request.method == 'POST':
        student_list = []
        student_name = request.POST.getlist('student_name')
        student_phone = request.POST.getlist('student_phone')

        zipped = zip(student_name,student_phone)

        for student_name,student_phone in zipped:
            student = Student.objects.create(student_name=student_name,
                                             student_phone=student_phone)
            student_list.append(student)

        return render(request,'students/view_all_student.html', {'instances': student_list})
    else:
        return render(request,'students/add_student.html')

However, Your issue seems to be concerned with users double posting this request. To remedy this you could pass them as a get parameter

def add_student(request):
    if request.method == 'POST':
        student_list = []
        student_name = request.POST.getlist('student_name')
        student_phone = request.POST.getlist('student_phone')

        zipped = zip(student_name,student_phone)

        for student_name,student_phone in zipped:
            student = Student.objects.create(student_name=student_name,
                                             student_phone=student_phone)
            student_list.append(str(student.id))

        redirect = HttpResponseRedirect(reverse('students:view_students'))
        redirect['Location'] += '&'.join(['students={}'.format(x) for x in student_list]))
        return redirect
    else:
        return render(request,'students/add_student.html')

def view_students(request):
    students = request.GET.getlist('students')
    if students:
        students = [int(x) for x in students]
        instances = Student.objects.filter(id__in=students)

这篇关于在django中通过url传递列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆