【发布时间】:2016-05-30 17:51:06
【问题描述】:
我想通过 url 传递一个列表。但是当我尝试时,我得到了一些错误。那我该怎么做。有人请帮助我..
这是我的看法
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)
这是我的网址:
url(r'^view-students/(?P<student_list>\w+)/$',views.view_students, name='view_students'),
这是我得到的错误。
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>.*)/$']
这里 (14,15) 是列表项。
如果问题不正确。有人请纠正问题。
【问题讨论】:
-
作为一般警告,您应该小心从
request.GET或request.POST获取数据并将其直接粘贴到过滤器中而不进行验证。您允许用户查看他们想要的表格中的任何项目,只需调整 url 或发布数据。 -
@Alasdair ....谢谢...使用 'uuid' 而不是 id。这是一个好的选择吗??...什么是替代解决方案??...如果可以请告诉我
-
这个问题太宽泛,无法在 cmets 中完全回答。 UUID 具有不可猜测的优点。其他时候,您可能有一个外键,例如从学生到教师。然后,您将只让登录用户查看他们当前教的学生。其他好的更改是要求您登录才能查看,并可能限制具有“查看学生”权限的用户访问。
标签: python django python-2.7 django-views django-urls