7

Django アプリケーションからユーザーがアップロードしたファイルの提供に問題があります。

models.py から:

class Picture (models.Model):

    title = models.CharField(max_length=48)

    date_added = models.DateTimeField(auto_now=True)

    content = models.ImageField(upload_to='pictures')

Django 管理者から、ファイルは user_res/pictures/ フォルダーにアップロードされます。

プロジェクトの settings.py から:

MEDIA_ROOT = 'user_res'

MEDIA_URL = '/user_res/'

STATIC_ROOT = ''

STATIC_URL = '/static/'

静的リソース (つまり、css または js ファイル) を参照しようとするたびに、次のような URL を使用してすべてが正常に機能します。

http://localhost:8000/static/<subfolder>/main.css.

ただし、ユーザーがアップロードしたファイルにアクセスすることはできません (これらのファイルは、user_res/pictures フォルダーの管理インターフェイスによって、次のような相対 URL で作成されます)。

user_res/pictures/test.jpg

URL は、呼び出し可能な Django Picture モデルから次のコード行で動的に作成されます。

return '<img src="{}"/>'.format(self.content.url)

url.py ファイルには、静的ファイルまたはメディア ファイル専用の url-s がありません。

Django にメディア ファイルを提供させる方法を知っている人はいますか? ライブ環境では、その特定のディレクトリにサービスを提供するように http サーバーを構成する必要があることを理解していますが、今のところ、軽量の開発スイートを維持したいと考えています。

ありがとうございました。

4

2 に答える 2

7

以下に示すように、urls.py ファイルを編集します。

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

プロジェクトの settings.py を次のように編集します。

#Rest of the settings
MEDIA_URL = '/media/'
MEDIA_ROOT = 'media'
STATIC_ROOT = ''
STATIC_URL = '/static/'

ユーザーがアップロードしたファイルの提供については、Django の公式ドキュメントをよくお読みください。ドキュメントへのリンク: https://docs.djangoproject.com/en/1.5/howto/static-files/#serving-files-uploaded-by-a-user

于 2014-07-08T08:30:41.153 に答える
0

url 属性は相対 URL ( Django の FileField ドキュメント) を返すと思うので、次のようにする必要があります。

return '<img src="{}"/>'.format(MEDIA_URL + self.content.url)

「http://localhost/books/」にアクセスするユーザーは「http://localhost/books/user_res/pictures/test.jpg」を要求するため、相対 URL は機能しません。

于 2012-12-16T12:48:51.377 に答える