2017-03-07 106 views
0

學習Django,我想建立一個網站,人們可以上傳圖片。整個帳戶應用程序(創建帳戶,更改密碼等)完成後,現在我必須創建一個允許用戶上傳圖像的應用程序。 我現在發現自己正在寫最後一個模板,但我不知道如何指定保存的圖片的路徑。Django上傳圖片的路徑

我已經創建了一個Image模型,用於將用戶提供的圖像文件保存到/ media/images目錄中,如下所示:image = models.ImageField(upload_to='images')

用戶具有完成形式爲:

class ImagePost(forms.ModelForm): 

    class Meta: 
     model = Image 
     fields = ('image','description','title') 

所以,他要提供一種圖像,說明和標題(描述和標題是類圖像模型的第2個其他屬性

這裏是處理邏輯部分的觀點:

@login_required 
def image_create(request): 
    if request.method == 'POST': 
    # form is sent 
     form = ImagePost(data=request.POST) 
     if form.is_valid(): 
      # form data is valid 
      cd = form.cleaned_data 
      new_item = cd.save(commit=False) 
      # assign current user to the item 
      new_item.user = request.user 
      new_item.save() 
      # redirect to new created item detail view 
      return render(request, 
         'images/all_images.html', 
         {'new_item': new_item}) 
    else: 
    # build form with data provided by the bookmarklet via GET 
     form = ImagePost(data=request.GET) 
    return render(request, 
       'images/image/create.html', 
       {'section': 'images', 
       'form': form, 
       }) 

最後處理表單模板,目前看起來是這樣的:

{% extends "base.html" %} 
{% block title %}Post an image{% endblock %} 
{% block content %} 
    <h1>Post an image</h1> 

    <form action="." method="post"> 
     {{ form.as_p }} 
     {% csrf_token %} 
     <input type="submit" value="Post it!"> 
    </form> 
{% endblock %} 

當用戶上傳圖片時,現在位於我的media/images目錄中的文件的名稱與用戶PC上的名稱相同。

如何找出該名稱,以便我可以指定Django顯示哪個文件?還是有一種方法來重命名文件,使其與用戶引入的標題相匹配?

<img src="media/images/WHAT_IS_YOUR_NAME" class="image-preview"> 

回答

0

只需使用<img src="{{ image.image.url }}" class="image-preview">

哪裏image是您Image模型的情況下,第二imageImage的示範田和urlImageField對象的屬性。更多關於它here,列表項#3。

+0

應該沒有什麼更像是:''(?),因爲當用戶提交表單時,將使用用戶提供的信息和文件創建Image模型的新實例。或者''? – ROBlackSnail

+0

第一個應該做的伎倆!覈實。你不提供你的模型的代碼! –

+0

它工作!對不起,大拖延。我的應用代碼中似乎有很多錯誤,並且無法運行服務器來測試它。謝謝 ! – ROBlackSnail