У меня есть приложение Imageloader, которое каждый раз загружает изображение, которое будет отображаться на странице html, поэтому я добавил кнопку загрузки к изображениям, и я также хочу добавить кнопку удаления, я пытаюсь добавить кнопку удаления к изображению каждый Когда я нажимаю кнопку, я получаю сообщение об ошибке 'str' объект не является отображением, даже я не понимаю, что означает эта ошибка, я много чего пробовал, но ниже это не сработало - мой код, любая помощь приветствуется.
urls.py -main
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name='home'),
path('image/', include('imageloader.urls'), 'imageloader'),
]
urls.py -app
app_name = 'imageloader'
urlpatterns = [
path('<int:pk>/', views.delete_pic, name='delete_pic'),
]
models.py -updated
class Imageloader(models.Model):
def validate_file_size(value):
filesize = value.size
if filesize > 3000000:
raise ValidationError(
"The maximum file size that can be uploaded is 3MB")
else:
return value
image = models.ImageField(
help_text='max size only 3mb ',
upload_to="imageloader_file/",
validators=[validate_file_size],
max_length=120,
blank=False,
unique=True,
)
class Meta:
ordering = ['-id']
def __str__(self):
return str(self.image)
view.py
def home(request):
"""this function to view the home page """
template_home = 'index.html'
img = Imageloader.objects.all()
if request.method == "POST":
form = Imageloaderform(request.POST, request.FILES)
if form.is_valid():
image = form.cleaned_data.get("image")
form.save()
messages.success(request, f'Image uploaded successfully')
return redirect('home')
else:
messages.error(request, f'Pls upload an Image!')
else:
form = Imageloaderform()
return render(request, template_home, {
'form': form,
'img': img,
})
def delete_pic(request, pk):
if request.method == "POST":
img = Imageloader.object.get(pk=pk)
img.delete()
return redirect('home')
шаблон:
{% for image2 in img %}
<div class="container">
<div class="d-flex justify-content-center">
<img style="height: 300px;" class="mb-3 w-50" src="{{ image2.image.url }}" alt="images!">
</div>
<div class="d-flex justify-content-center">
<a href="{{ image2.image.url }}" download>
<button type="button" class="btn btn-outline-primary mb-3">Download</button>
</a>
<form method="POST" action="{% url 'imageloader:delete_pic' image2.id %}">
{% csrf_token %}
<button type="submit" class="btn btn-outline-danger ml-2">Delete</button>
</form>
</div>
</div>
{% endfor %}
ниже приведено исключение: -обновлено
TypeError at /image/10/
'str' object is not a mapping
Request Method: POST
Request URL: http://127.0.0.1:8000/image/10/
Django Version: 3.0.3
Exception Type: TypeError
Exception Value:
'str' object is not a mapping
Exception Location: D:\Work\Dummy-Website\dummy website practice\second try\practice_2 project\env\lib\site-packages\django\urls\resolvers.py in resolve, line 556
Python Executable: D:\Work\Dummy-Website\dummy website practice\second try\practice_2 project\env\Scripts\python.exe
Python Version: 3.7.4
Python Path:
['D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env\\Scripts\\python37.zip',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env\\DLLs',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env\\lib',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env\\Scripts',
'c:\\users\\yazan bader\\appdata\\local\\programs\\python\\python37\\Lib',
'c:\\users\\yazan bader\\appdata\\local\\programs\\python\\python37\\DLLs',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env',
'D:\\Work\\Dummy-Website\\dummy website practice\\second try\\practice_2 '
'project\\env\\lib\\site-packages']
Server time: Thu, 20 Feb 2020 18:27:55 +0300