Изображение профиля не отображается

Я могу загрузить изображение профиля, и оно попадает в базу данных. У меня есть «print(profile.profile_picture)» в моем view.py, который правильно распечатает текущее изображение профиля в консоли при сохранении. Однако по какой-то причине изображение профиля не отображается, мой «{% if Profile.profile_picture %}» в моем профиле.html даже ничего не распознает. [Изображение профиля не отображается]

ВИДЫ.PY=

@login_required
def profile(request):
    profile, created = Profile.objects.get_or_create(user=request.user)
    print(profile.profile_picture)
    if request.method == 'POST':
        form = ProfileForm(request.POST, request.FILES, instance=profile)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
            return redirect('base:profile')  # Redirect to the home page after form submission
    else:
        form = ProfileForm(instance=profile)
    
    return render(request, 'profile.html', {'form': form})

ПРОФИЛЬ.HTML=

    <div class = "ProfilePage">
        <form method = "POST" enctype = "multipart/form-data" class = "profile-form">
            {% csrf_token %}
            
            <div class = "form-group">
                <label for = "id_username">Username:</label>
                <input type = "text" id = "id_username" value = "{{ request.user.username }}" readonly>
            </div>

            <div class = "form-group">
                <label for = "id_bio">Bio:</label>
                <textarea id = "id_bio" name = "bio" rows = "4" cols = "50" required>{{ form.bio.value }} </textarea>
            </div>

            <div class = "form-group">
                <label for = "id_profile_picture">Profile Picture:</label>
                <input type = "file" id = "id_profile_picture" name = "profile_picture" accept = "image/*">
            </div>
            
            {% if profile.profile_picture %}
                <div class = "form-group">
                    <label>Profile Picture Preview:</label><br>
                    <img src = "{{ profile.profile_picture.url }}" alt = "Profile Picture" style = "max-width:     500px;">
                </div>
            {% endif %}
    
            <button type = "submit" class = "btn-submit">Save</button>
            
            
        </form>
    </div>                                                                                                      

ФОРМЫ.PY=

     from django import forms
     from .models import Profile

     class ProfileForm(forms.ModelForm):
       class Meta:
         model = Profile
         fields = ['bio', 'profile_picture'] 

URLS.PY =

    from django.contrib import admin
    from django.urls import path, include
    from django.conf import settings
    from django.conf.urls.static import static
    from base import views  # Import views from the base app

    urlpatterns = [
    path('admin/', admin.site.urls),
    path("", include(("base.urls", "base"), namespace = "base")),  # Include     
 app-level URLs with a namespace
    path('profile/settings/', views.profile_settings, name='profile_settings'),
    path('profile/<str:username>/', views.public_profile, name='public_profile'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

МОДЕЛИ.PY =

    from django.db import models
    from django.contrib.auth.models import User
    from django.contrib.auth import get_user_model
    import uuid
      from datetime import datetime

    User = get_user_model()

    class Profile(models.Model):
          user = models.OneToOneField(User, on_delete=models.CASCADE)
          bio = models.TextField(blank=True)
          profile_picture = models.ImageField(upload_to='profile_pics',       
 blank=True)

     class Post(models.Model):
          id = models.UUIDField(primary_key=True, default=uuid.uuid4)
          user = models.CharField(max_length=100)
          image = models.ImageField(upload_to='post_images')
          caption = models.TextField()
          created_at = models.DateTimeField(default=datetime.now)
          no_of_likes = models.IntegerField(default=0)

          def __str__(self):  
              return self.user

Я могу дать больше информации, я немного не понимаю, почему это не работает.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Добавили ли вы конец строки этого кода в свой urls.py в папке настроек проекта и какой путь установлен для MEDIA_URL и MEDIA_ROOT?

# settings.py
MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"
# root urls.py  
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

если это не помогло, покажите свой код в models.py

MEDIA_URL = '/media/' и MEDIA_ROOT = os.path.join(BASE_DIR, 'media') Да, у меня был + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) в конце моих шаблонов URL, у меня не было статического один. Я только что попробовал это, и это, похоже, не помогло.

KnewJams 28.04.2024 06:42

Отредактировано, чтобы включить urls.py и models.py.

KnewJams 28.04.2024 06:52

как вы перерисовываете переменную профиля в html здесь ниже ``` return render(request, 'profile.html', {'form': form}) ``` в моем случае я использую такой ``` профиль, созданный = Profile.objects.get_or_create(user=request.user) return render( request, "profile.html", {"profile": Profile}, ) ```

bahrom04 28.04.2024 07:04

можете ли вы отметить мой ответ как статус «отвечено»

bahrom04 28.04.2024 08:18

О, на самом деле моя биография теперь не работает, она не отображает текст, как только я изменил форму: форма на профиль: профиль хаха

KnewJams 28.04.2024 08:21

Возможно, попробуйте этот возвратный рендер (запрос, "profile.html", {"form":form, "profile": Profile}, )

bahrom04 28.04.2024 08:39

Да, тоже работало. Еще раз спасибо, брат.

KnewJams 28.04.2024 08:41

Другие вопросы по теме