2017-05-16 14 views
1

画像をアップロードできません。ここ ファイルフィールドを使用してdjangoに画像をアップロードできません

はここ

は、画像をアップロードするためのテンプレートである画像がにアップロード取得されていない

class Post(models.Model): 
    author = models.ForeignKey('auth.User') 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    image = models.FileField(upload_to = 'post/static/images/' , null= True, blank= True) 
    created_date = models.DateTimeField(default=timezone.now) 
    published_date = models.DateTimeField(blank=True, null=True) 

    def publish(self): 
     self.published_date = timezone.now() 
     self.save() 

    def __str__(self): 
     return self.title 

models.py 'ポスト/静的/画像/' です

{% if post.media %} 
    <img src="{{ post.image.url }}" class="img-responsive" /> 
    {% endif %} 
+0

あなたのフォームに正しいエンティティタイプが含まれていますか? 'enctype =" multipart/form-data "' – fez

+0

あなたのコードは画像をアップロードするのではなく、画像を表示するためのものです。 – doru

+0

@doru画像のみを表示する必要があります。画像が指定されたフォルダにアップロードされていない – Sanjana

答えて

1

あなたのコードには多くの問題があります:あなたのモデルで

  1. は - (あなたがPillowをインストールする必要がありImageFieldを使用するように)画像uplaoding ImageFieldためのフィールドを使用します。

    image = models.ImageField(upload_to = 'images/' , null= True, blank= True) 
    

    imagesという名前のMEDIA_ROOTフォルダのサブフォルダに画像をアップロードします)

  2. はまた、メディアフォルダ内の画像を入れて - あなたは1を作成する必要があり、settings.pyフォルダに追加します。

    MEDIA_URL = '/media/' 
    MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') 
    
  3. をDjangoはあなたのメディアにサービスを提供できるようにするには、あなたが追加する必要があります(唯一の開発のために!) (あなたのアプリケーションフォルダからではなくあなたのプロジェクトディレクトリから)あなたのメインにのURL。PYファイル:

    from django.conf import settings 
    from django.conf.urls.static import static 
    
    if settings.DEBUG: 
        urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 
    
  4. 単純な形態の例は、画像をアップロードする:url_upload_picが画像のアップロードを処理する(機能)図である

    <form action="{% url upload_pic %}" method="post" enctype="multipart/form-data">{% csrf_token %} 
        <input id="id_image" type="file" class="" name="image"> 
        <input type="submit" value="Submit" /> 
    </form> 
    

+0

ありがとうございます。訂正 – Sanjana

1

そして良いことだと思いますあまりにも。

MEDIA_ROOTとSTATIC_ROOTの値が異なる必要があります。 STATIC_ROOTが導入される前は、静的ファイルも提供するために MEDIA_ROOTに依存するか、フォールバックするのが一般的でした。しかし、これは 重大なセキュリティの影響を持つ可能性があるので、 を防ぐための妥当性チェックがあります。使用して MEDIA_ROOTから https://docs.djangoproject.com/en/1.11/howto/static-files/#serving-files-uploaded-by-a-user-during-development

開発時には、あなたが果たすことができ、ユーザーがアップロードしたメディアファイル:あなたは(開発中)やって欲しいhttps://docs.djangoproject.com/en/1.11/ref/settings/#media-root

は、このガイドに従うことですdjango.views.static.serve()ビュー。

これはプロダクションでは使用できません。いくつかの一般的な展開方法については、静的ファイルの展開を参照してください。あなたのMEDIA_URLがメディア/ /として定義されている場合たとえば、あなたがあなたのurls.pyに次のコードを追加することで、この を行うことができます

基本的に、あなたはMEDIA_ROOTでの場所にファイルをupdload djangoに静的に似ていると伝えてください。しかし、静的に直接アップロードすることはありません。

関連する問題