Django admin view uploaded photo

倾然丶 夕夏残阳落幕 提交于 2021-02-09 05:36:45

问题


I have implemented photo upload in Django but I have a problem to view it Django admin.

models.py

class WorkPlacePhoto(models.Model):

    file = models.FileField(storage=FileSystemStorage(location=settings.MEDIA_ROOT), upload_to='uploads')

Photos are saved in PATH_TO_APP/media/uploads/ and I can view them in my app. However, in admin panel, when I clicked on the link which admin app is generated it gives me 404 error as

Request Method: GET
Request URL:    http://127.0.0.1/admin/wpphotos/workplacephoto/9/media/uploads/aosa_glb_ho_778_hi.jpg/

u'9/media/uploads/aosa_glb_ho_778_hi.jpg' object is not found

Although the message is clear, I couldn't figure out which url should be written to view the image and of course how admin class should be modified.

I glad to suggest me a way to achieve this. Thanks...


回答1:


From you description I am guessing your MEDIA_URL isn't set correctly, something which is a bit tricky to do using the Django development web server.

I am guessing that the link's href would probably be media/uploads/aosa_glb_ho_778_hi.jpg where you probably want /media/uploads/aosa_glb_ho_778_hi.jpg so it is relative to http://127.0.0.1/ not to where you happen to be now http://127.0.0.1/admin/wpphotos/workplacephoto/9/.

See the static files documentation for inspiration of how to serve your images with the Django development server.




回答2:


I have the same issue but I managed to fix it -but it's not a correct method and I'd like to use a better solution if possible.
What I did was, I have apache running on port 80, so I created a symbolic link in the /var/www folder which is pointing to the Images folder in my Django App directory. And the Media URL is basically this:

MEDIA_URL = 'http://127.0.0.1/Images/'

This work fine, but I don't like the solution.
I didn't quite follow the solution explained above. Could someone please explain more?




回答3:


By now, you probably either solved your problem or quit it altogether, but after all these years people (like me) still have this problem. Here's how I just solved it:

  1. On settings.py, I set not only STATIC_URL (with the name of the static folder) and STATIC_URL (with the path to that folder) but I also set MEDIA_URL and MEDIA_ROOT accordingly, where the uploaded images will be stored at;

  2. On my model class, I have my picture field looking as follow:

    picture = models.FileField(upload_to='images/')
    

It will upload the image to my MEDIA_ROOT folder, appending /images/ to it.

  1. And finally, on my urls.py, my urlpatterns looks like this:

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    

Notice how I appended the static right after the list.

Django's documentation makes it clear that this strategy is not recommended for production environment and it gives some alternatives you can choose from. For more information: https://docs.djangoproject.com/en/1.10/howto/static-files/#serving-files-uploaded-by-a-user-during-development




回答4:


You probably have in your settings.py

MEDIA_URL = 'media/'

Being the url relative, you have that behavior in the admin panel. The solution would be to set the url as absolute

MEDIA_URL = '/media/'


来源:https://stackoverflow.com/questions/6670021/django-admin-view-uploaded-photo

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