Reputation: 47
I want to know how to add a delete button in my form for deleting an image.
The project is a simple "Pics viewer", the index shows all the images that are stored but I want to add an "x" icon for deleting that specific image.
Here is my code.
views.py
from django.shortcuts import render, redirect
from gallery.forms import ImageForm
from gallery.models import Image
def index(request, image_form=None):
image_form = image_form or ImageForm(request.POST, request.FILES)
if request.method == 'POST':
if image_form.is_valid():
new_image = Image(image=request.FILES['image_file'])
new_image.save()
# obtenemos el listado de imagenes registradas
images_list = Image.objects.all().order_by('-id')
return render(request, 'index.html', {
'image_form' : image_form,
'images_list' : images_list,
})
models.py
from django.db import models
from django.contrib import admin
class Image(models.Model):
image = models.FileField(upload_to='static/gallery/%Y/%m/%d')
admin.site.register(Image)
forms.py
from django import forms
class ImageForm(forms.Form):
image_file = forms.FileField(
label='choose a file',
help_text = 'Max 2 megabytes'
)
index.html (It shows a list of images )
<style>
ul {list-style:none; width:800px;}
ul li {float:left; margin:6px;}
</style>
<form action="./gallery" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p> {{ image_form.non_field_errors }} </p>
<p> {{ image_form.image_file.label_tag }} </p>
<p> {{ image_form.image_file.help_text }} </p>
<p>
{{ image_form.image_file.errors }}
{{ image_form.image_file }}
</p>
<p> <input type="submit" value="subir"> </p>
</form>
<h2>Imágenes</h2>
<ul>
{% for image in images_list %}
<li>
<img src="/{{ image.image }}" height="75" />
</li>
{% endfor %}
</ul>
I want to add on index.html the delete button deleting an image :D
Upvotes: 1
Views: 3099
Reputation: 11259
from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Image
class ImageDelete(DeleteView):
model = Image
success_url = reverse_lazy('index')
from myapp.views import index, ImageDelete
...
url(r'^image/(?P<id>\d+)/delete/$', ImageDelete.as_view(), name="image-delete"),
...
{% for image in images_list %}
<li>
<img src="/{{ image.image }}" height="75" />
<a href="{% url 'myapp:image-delete' image.id %}">Delete</a>
</li>
{% endfor %}
Upvotes: 0
Reputation: 22808
urls.py
[.........]
url(
r'^delete-image/(?P<id>\d+)/$',
'delete_image',
name="delete_image"
),
[.........]
views.py
def delete_image(request, id):
image = Image.objects.get(pk=id).delete()
return HttpResponseRedirect(reverse('app_name:url_name'))
template
<ul>
{% for image in images_list %}
<li>
<img src="/{{ image.image }}" height="75" />
<a href="{% url app_name:delete_image image.id %}">Delete</a>
</li>
{% endfor %}
</ul>
Upvotes: 1