#django #django-models #django-views #django-forms #django-templates
#django #django-модели #django-просмотры #django-forms #django-шаблоны
Вопрос:
Я новичок в Django и создаю способ для пользователей загружать изображение в сообщение. Тогда изображение должно быть видно на странице каждого отдельного сообщения.
До сих пор в моей функции «создать» пользователи могут успешно создавать сообщения и загружать фотографии. Фотография загружена в мой проект, но она по-прежнему не отображается вообще. Любая помощь приветствуется.
Я думаю, проблема в том, как класс в views.py , и html-код в index.html записывается. Просто не уверен, как исправить.
views.py чтобы создать сообщение:
def create(request):
if request.method == 'GET':
context = {
'form': CreateForm(),
'form1': CategoryForm(),
'img_form': ImgForm(),
}
return render(request, "auctions/create.html", context)
else:
form = CreateForm(request.POST, request.FILES)
form1 = CategoryForm(request.POST, request.FILES)
img_form = ImgForm(request.POST, request.FILES)
if form.is_valid():
title = form.cleaned_data['title']
description = form.cleaned_data['description']
starting_bid = form.cleaned_data['starting_bid']
if form1.is_valid():
category = form1.cleaned_data['category']
if img_form.is_valid():
image = img_form.cleaned_data['image']
auctionCreated = Listings.objects.create(
title=title,
description=description,
starting_bid=starting_bid,
)
categoryCreated = Categories.objects.create(
category=category,
)
ImageCreated = Img.objects.create(
image=image,
)
return redirect('index')
views.py — это должно показать список каждого сообщения (на главной странице), и каждое изображение должно быть видно, но изображение не отображается:
def index(request):
items = Listings.objects.all()
images = Img.objects.all()
return render(request, "auctions/index.html", {
'items': items,
'images': images,
})
views.py для отображения изображения:
class ImgDisplay(DetailView):
model = Img
template_name = 'listing.html', 'index'
context_img_name = 'pic'
models.py
class Img(models.Model):
image = models.ImageField(upload_to='images/')
forms.py
class ImgForm(ModelForm):
class Meta:
model = Img
fields = '__all__'
index.html
{% for i in items %}
{% for photo in images %}
<img src="{{pic.image.url}}" class="card-img" alt="...">
{% endfor %}
<a href="{% url 'listingpage' i.id %}"><button class="btn btn-primary">Bid Now!
</button></a>
{% endfor %}
Ответ №1:
ваш index.html параметры неверны. вы передаете images
в качестве параметра контекста из index view
. Но когда вы используете for-loop
в index.html вы используете pic.image.url
в качестве источника изображения то, что должно быть photo.image.url
.
если вы хотите показывать изображения с помощью ImgDisplay(DetailView)
, то вы можете использовать pic.image.url
, а также необходимо исправить template_name
.
`template_name` = 'listing.html', 'index.html'