Passing information between web pages in Django

蓝咒 提交于 2020-01-06 04:15:47

问题


I have an Image Gallery System where I'm building a feature to edit the attributes of an uploaded image.

@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')

This is my edit method in views.py. Notice that I am getting the image object as the image whose attributes has to be edited. If the image is found then I'm redirecting to home/photo-edit where I want to display a HTML page containing a form with image attributes, pre-filled with existing attributes.

My views.py method for home/photo-edit/ URL is

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

But image here isn't getting recognised even though I am sending it from home/edit to home/photo-edit. How do I do this? Is he syntax wrong?


回答1:


You could solve this be passing the ZSN or the Image PK as an URL parameter to the next view. You need to do that because the actual Image instance can not be passed to the next view directly.

For example:

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)
    ...

Note how in this example the line redirect('photo-edit', image.pk) passes the image PK to the next view. Now you would just need to implement the view photo_edit to fit your use case.

Let us know if that brings you closer to solving your problem.



来源:https://stackoverflow.com/questions/51516510/passing-information-between-web-pages-in-django

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!