Django — пользователь может загрузить изображение, но изображение не отображается — проблема с HTML? (Справка для начинающих)

#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'