загрузить файл изображения с помощью тега входного файла из шаблона django и сохранить загруженное изображение в каталоге в моем проекте
Попробуйте использовать подушку:
Сначала установите пакет
pip3 install Pillow
Затем создайте поле и функцию
в ваших models.py:
# models.py
import os
from django.db import models
from django.utils.timezone import now as timezone_now
from django.utils.translation import ugettext_lazy as _
def upload_to(instance, filename):
now = timezone_now()
base, ext = os.path.splitext(filename)
ext = ext.lower()
return f"(your_dir)/{now:%Y/%m/%Y%m%d%H%M%S}{ext}"
# Do add the date as it prevents the same file name from occuring twice
# the ext is reserved for the file type and don't remove it
class MyExampleClass(models.Model):
...
picture = models.ImageField(_("Picture"), upload_to=upload_to, blank=True, null=True)
Затем создайте форму для загрузите изображение:
# forms.py
from django import forms
class MyExampleForm(forms.ModelForm):
class Meta:
model = MyExampleClass
fields = ["picture"]
Не забудьте отобразить его в виде и вашем URL:
# views.py
from django.shortcuts import render, redirect
from .forms import MyExampleForm
def add_image(request):
form = MyExampleForm()
if request.method == "POST":
form = MyExampleForm(data=request.POST, files=request.FILES)
if form.is_valid():
form.save()
return redirect("")
else:
return render(request, "myexamplehtml.html", {"form": form})
# quotes/urls.py
from django.urls import path
from .views import MyExampleView
urlpatterns = [
path('foobar/', add_image, name='myexampleview'),
]
Наконец, добавьте его в файл HTML:
{% block content %}
<form method="post" action="your_url" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">submit</button>
</form>
{% endblock %}
Что касается второй части, я думаю, что вы можете получить доступ к переменной вашего пользователя следующим образом:
MyExampleModel._meta.get_field('picture')
и затем поместить этот код туда, где вы хотите, чтобы он функционировал
Надеюсь, что это работает!