[英]How to Upload an Image to Django
我在這上面花了三天多的時間。 似乎有些東西保存到了數據庫,但是當我嘗試在模板中訪問它時,我只能得到數據庫的 object。 我無法訪問它。 我相信它沒有成功保存,因為我沒有看到將保存它的媒體文件夾。 這就是我到目前為止所擁有的。
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'), )
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# forms.py
from .models import Pic
from django import forms
class ImageForm(forms.ModelForm):
class Meta:
model= Pic
fields= ["picture"]
# models.py
class Pic(models.Model):
picture = models.ImageField(upload_to = 'media/', default = 'media/None/no-img.jpg', null=True, blank= True)
# views.py
def upload(request):
form = ImageForm
context = {}
userBio = Bio.objects.get(userData = User.objects.get(id = request.session['client']['id']))
if request.method == 'POST':
# .is_valid checks the models parameters via forms method
form = ImageForm(request.POST,request.FILES)
if form.is_valid():
form.save()
print("succesful uploaded image")
return redirect("/dashboard")
else:
print("Not a valid input from form....")
messages.error(request,"Not a valid input")
return redirect("/dashboard")
<!-- dashboard.html -->
<form rule="form" class="border border--secondary" method="POST" action="/manageFile" enctype="multipart/form-data">
{% csrf_token%}
<input type="file" name = "update">
<input type = "submit">
</form>
{% if pictures %}
{% for pic in pictures%}
<img src="{{pic}}" alt="{{pic}}">
{% endfor %}
{% endif%}
在模板中,它顯示為 Pic 對象 (1)。 在終端中,它顯示為
查詢集圖:圖object(1)
這是我渲染到模板的內容。
def dash(request):
try:
_id = request.session['client']['id']
except:
return redirect("/loginPg")
userBio = Bio.objects.get(userData = User.objects.get(id = request.session['client']['id']))
print("its right here")
theUploads = Pic.objects.all()
print("This image object -", theUploads)
content = {
"title" : userBio.title,
"qA" : userBio.quoteA,
"qB" : userBio.quoteB,
"desc" : userBio.desc,
"authorA" : userBio.authorA,
"authorB" : userBio.authorB,
"pictures" : theUploads
}
return render(request, "GoEnigma/dashboard.html", content)
# urls.py
from django.conf.urls.static import static
from django.conf import settings
# urls []
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
這很難發現,因為您自己渲染表單域:
class ImageForm(forms.ModelForm):
class Meta:
model= Pic
fields= ["picture"]
<input type="file" name = "update">
所以文件字段的名稱是更新,而不是圖片。 將其更改為圖片,它應該可以工作,盡管使用 django 渲染表單要好得多,因此您不會犯這樣的錯誤,並且對表單的更改會傳播到 html。
在 ImageForm 后面加上括號,如果是 Post 請求,則在 ImageForm 中添加 request.POST。
def upload:
form = ImageForm()
if request.method == 'POST':
# .is_valid checks the models parameters via forms method
form = ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
print("succesful uploaded image")
return redirect("/dashboard")
else:
print("Not a valid input from form....")
messages.error(request,"Not a valid input")
return redirect("/dashboard")
還要檢查您是否沒有添加 url 路徑來提供媒體文件,因此在main project
的urls.py
文件中添加以下幾行。
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ..... all regular paths
]
if setting.DEBUG: # if true
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
在這里查看官方文件
如果圖片被保存在數據庫中,則錯誤在於渲染模板。 要在模板中渲染圖像,您需要獲取 {{model_class.model_fields.url}},因此在您的情況下,class 是圖片,字段是圖片。 在你的模板中試試這個<img src="{{pic.picture.url}}">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.