在Django

时间:2018-07-25 10:22:07

标签: python html django django-models django-forms

我有一个图片库系统,其中正在构建一个功能来编辑上载图像的属性。

@login_required
def edit(request):

    if request.method == 'POST':
        ZSN = request.POST['ZSN']
        ZSN = 'images/' + ZSN + '.'

        image = Images.objects.filter(file__startswith=ZSN)

        if image:
            return HttpResponseRedirect('/home/photo-edit', {'image':image})
        else:
            return HttpResponse("Invalid ZSN.")
    else:
        return render(request, 'cms/edit.html')

这是我在edit中的views.py方法。请注意,我将image对象作为其属性必须编辑的图像。如果找到了图像,那么我将重定向到home / photo-edit,在这里我要显示一个HTML页面,其中包含一个带有图像属性的表单,该表单已预先填充了现有属性

我的home / photo-edit / URL的views.py方法是

@login_required
def photoedit(request):
    return render(request, 'cms/photo-edit.html', {'image':image})

但是,即使我将图像从home/edit发送到home/photo-edit,也无法识别此处的图像。我该怎么做呢?他的语法错误吗?

1 个答案:

答案 0 :(得分:0)

您可以通过将ZSNImage PK作为URL参数传递给下一个视图来解决。您需要这样做,因为实际的Image实例无法直接传递到下一个视图。

例如:

urls.py

from . import views
urlpatterns = [
    url(r'^home/edit/$', views.edit, name='edit'),
    url(r'^home/photo-edit/(?P<photo_id>[0-9]+)/$', views.photo_edit, name='photo-edit'),
]

views.py

def edit(request):
    if request.method == 'POST':
        ...
        image = Images.objects.filter(...).first()
        if image is not None:
            return redirect('photo-edit', image.pk)
        else:
            return HttpResponse("Invalid ZSN.")
    else:
        return render(request, 'cms/edit.html')

def photo_edit(request, image_pk):
    image = get_object_or_404(Image, pk=image_pk)
    ...

请注意,在此示例中,行redirect('photo-edit', image.pk)如何将图像PK传递到下一个视图。 现在,您只需要实现视图photo_edit以适合您的用例即可。

让我们知道这是否使您更接近解决问题。