代码之家  ›  专栏  ›  技术社区  ›  KnewJams

个人资料图片未显示

  •  0
  • KnewJams  · 技术社区  · 1 年前

    我可以上传一张个人资料图片并将其放入数据库。我的views.py中有一个“print(profile.profile_picture)”,当我保存时,它将正确打印控制台中的当前配置文件图片。由于某种原因,个人资料图片将不会显示,但我的个人资料.html中的“{%if profile.profile_picture%}”甚至没有拾取任何内容。 [ media ]

    printed profile picture

    profile picture

    意见。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'] 
    

    url。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
    
    

    我可以提供更多信息,我有点困惑为什么这不起作用。

    1 回复  |  直到 1 年前
        1
  •  0
  •   bahrom04    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中显示您的代码