4

これまでのところ、ユーザーが画像をアップロードする部分に到達しましたが、メディアフォルダーにある画像をどのように使用できますか?これが私が試したことです:

私の見解:

#I even tried to import MEDIA_ROOT to use it in my template...
#from settings import MEDIA_ROOT

def home(request):
    latest_images = Image.objects.all().order_by('-pub_date')
    return render_to_response('home.html',
                             #{'latest_images':latest_images, 'media_root':MEDIA_ROOT},
                             {'latest_images':latest_images,},
                             context_instance=RequestContext(request)
                             )

私のモデル:

class Image(models.Model):
    image = models.ImageField(upload_to='imgupload')
    title = models.CharField(max_length=250)
    owner = models.ForeignKey(User)
    pub_date = models.DateTimeField(auto_now=True)

私のテンプレート:

{% for image in latest_images %}
    <img src="{{ MEDIA_ROOT }}{{ image.image }}" width="100px" height="100px" />
{% endfor %}

と私のsettings.pyMEDIA_ROOTとURL:

MEDIA_ROOT = '/home/tony/Documents/photocomp/photocomp/apps/uploading/media/'
MEDIA_URL = '/media/'

繰り返しになりますが、私がやろうとしていることは次のとおりです。テンプレートでこれらの画像を使用してください。

4

5 に答える 5

5

url属性を使用すると、MEDIA_URLが自動的に追加されます。nameなしのパスが必要な場合に使用しますMEDIA_URL。だからあなたがする必要があるのは:

<img src="{{ some_object.image_field.url }}">
于 2012-04-13T14:01:12.547 に答える
3

開発マシンでは、アップロードされたファイルを提供するようにdevserverに指示する必要があります

# in urls.py
from django.conf import settings

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
    )

{# in template, use sorl-thumbnail if your want to resize images #}
{% with image.image as img %}
<img src="{{ img.url }}" width="{{ img.width }}" height="{{ img.height }}" />
{% endwith %}

# furthermore, the view code could be simplified as
from django.shortcuts import render
def home(request):
    latest_images = Image.objects.order_by('-pub_date')
    return render(request, 'home.html', {'latest_images':latest_images})

通常のファイルシステムストレージを使用する実稼働環境では、WebサーバーにMEDIA_ROOTへの書き込み権限があることを確認してください。/media/filenameまた、正しいパスから読み取るようにWebサーバーを構成します。

于 2012-04-13T14:06:43.510 に答える
2

ImageField()にはurl属性があるので、次を試してください。

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

次のようにモデルにメソッドを追加して、MEDIA_ROOTの部分をスキップすることもできます。

from django.conf import settings

class Image(...):

    ...

    def get_absolute_url(self):
        return settings.MEDIA_URL+"%s" % self.image.url

また、私は正気のためにこのようにupload_toを使用します:

models.ImageField(upload_to="appname/classname/fieldname")

次の設定を試してください。

import socket

PROJECT_ROOT = path.dirname(path.abspath(__file__))

# Dynamic content is saved to here
MEDIA_ROOT = path.join(PROJECT_ROOT,'media')

if ".example.com" in socket.gethostname():
    MEDIA_URL = 'http://www.example.com/media/'
else:
    MEDIA_URL = '/media/'

# Static content is saved to here
STATIC_ROOT = path.join(PROJECT_ROOT,'static-root') # this folder is used to collect static files in production. not used in development
STATIC_URL =  "/static/"
STATICFILES_DIRS = (
    ('', path.join(PROJECT_ROOT,'static')), #store site-specific media here.
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
于 2012-04-13T13:32:30.343 に答える
1

Djangoバージョン2.2の場合は、次のことを試してください。

#You need to add the following into your urls.py  
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
Your URL mapping
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #add this  

# And then use this in your html file to access the uploaded image
<img src="{{ object.image_field.url }}">
于 2018-11-12T00:34:00.730 に答える
0

アップロードされた画像を含むフォルダーを「Webアクセス可能」にする必要があります。つまり、Djangoを使用してフォルダーから静的ファイルを提供するか、専用のWebサーバーを使用します。

テンプレートコード内では、適切なMEDIA_URL値を使用する必要があります。

于 2012-04-13T13:30:00.063 に答える