如何在Django中将ImageField中的Image显示给用户?

问题描述 投票:1回答:2

我试图在Django中显示来自图像场的图像。图像域正常工作。我可以将图像保存到本地存储,但问题是当服务器运行时,我会在图像域的位置看到一个URL。我猜它应该是图像的网址,但是当我点击它时,它只是重新加载当前页面。我怎样才能这样做,当我点击它时,我被带到一个带有图像的页面?这就是我尝试过的方法,但它不起作用:

#views.py

class CreateView(generics.ListCreateAPIView):
    """This class defines the create behaviour of our REST Api"""
    queryset = BucketList.objects.all()
    serializer_class = BucketListSerializerPostOnly

    def perform_create(self, serializer):
        """Save post data when creating a new bucketlist"""
        serializer.save()



class DetailsView(generics.RetrieveUpdateDestroyAPIView):
    """This Class handles the http GET, PUT, and DELETE requests"""
    queryset = BucketList.objects.all()
    serializer_class = BucketListSerializer



# shows image in a new tab?
def show_image(request, img):
    context = {
        'image': img
    }
    return render(request, 'images.html', context)


# my html file


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img src="/media/documents/{{ image }}">
    <a href="/">Go Back</a>
</body>
</html>

# urls.py


urlpatterns = [
url(r'^bucketlist/$', CreateView.as_view(), name='create'),
url(r'^', CreateView.as_view(), name='create'),
url(r'^bucketlist/(?P<pk>[0-9]+)/$', DetailsView.as_view(), name='details'),
url(r'^media/documents/(?P<img>[\w\-]+)/$', views.show_image, 
name='view_image')
]

urlpatterns = format_suffix_patterns(urlpatterns)
python django url-routing imagefield
2个回答
0
投票

您应该能够使用url属性,在此处记录https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.fields.files.FieldFile.url

在您的模板中,您可以:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img src="{{ image.url }}">
    <a href="/">Go Back</a>
</body>
</html>

为了使图像链接到自身:

<a href="{{ image.url }}">
    <img src="{{ image.url }}">
</a>

0
投票

要使任何网址正常工作,首先需要将其正确添加到urls.py中

将MEDIA_URL和MEDIA_ROOT添加到settings.py:

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_files')
MEDIA_URL = '/media/'

在项目的根目录中创建“uploaded_files”。

添加到urls.py的新链接

from . import views, settings
from django.contrib.staticfiles.urls import static
from django.contrib.staticfiles.urls import 

urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

显示如下:

<img src="{{ object.image.url }}"/>
© www.soinside.com 2019 - 2024. All rights reserved.