html 在Django中保存数据后图像无法显示,代码如下

laawzig2  于 2022-12-02  发布在  Go
关注(0)|答案(4)|浏览(132)

问题陈述:In shown image, default profile pic is visible but i need uploaded photo to be displayed here when i upload and saved in the database.I am using django framework.
我在这里尝试了什么?
在setting.html文件中,下面是尝试显示图像,简历,位置的HTML代码。问题可能是在第一个div图像标签。虽然默认的个人资料图片是可见的,但我上传的图片不在页面中显示,也不能保存在数据库中。

<form action="" method ="POST">
{% csrf_token %}
<div class="grid grid-cols-2 gap-3 lg:p-6 p-4">
<div class="col-span-2">
   <label for="">Profile Image</label>
   <img width = "100" height = "100" src="{{user_profile.profileimg.url}}"/>
   <input type="file" name='image' value = "" placeholder="No file chosen" class="shadow-none bg-gray-100">
</div>
<div class="col-span-2">
   <label for="about">Bio</label>  
   <textarea id="about" name="bio" rows="3"  class="shadow-none bg-gray-100">{{user_profile.bio}}</textarea>
</div> 
<div class="col-span-2">
   <label for=""> Location</label>
   <input type="text" name = "location" value = "{{user_profile.location}}" placeholder="" class="shadow-none bg-gray-100">
</div>
 </div> 
                                
 <div class="bg-gray-10 p-6 pt-0 flex justify-end space-x-3">
 <button class="p-2 px-4 rounded bg-gray-50 text-red-500"> <a href="/"> Cancel</a> </button>
 <button type="submit" class="button bg-blue-700"> Save </button>
 </div>
 </form>

在views.py文件中,下面的函数是用于显示图像、个人简历和位置的视图文件设置页面逻辑。如果图像没有上传,它将是默认的个人资料图片。如果图像不是“无”,则显示上传的图像。但我不知道我的代码中有什么错误。

@login_required(login_url='signin')
def settings(request):
    user_profile = Profile.objects.get(user = request.user)
    if request.method == "POST":
        if request.FILES.get('image')== None:
            image = user_profile.profileimg
            bio = request.POST['bio']
            location = request.POST['location']

            
        else:
            image = request.FILES.get('image')
            bio = request.POST['bio']
            location = request.POST['location']

        user_profile.profileimg = image
        user_profile.bio = bio
        user_profile.location = location
        user_profile.save()
        return redirect("settings")

    return render(request, 'setting.html', {'user_profile': user_profile})

我希望知道代码中的错误是什么。只有profileimg不能保存在数据库中。其他数据可以保存,如生物,位置。
下面是model.py文件。

from django.db import models
from django.contrib.auth import get_user_model

User = get_user_model()
# Create your models here.
class Profile(models.Model):
    user = models.ForeignKey(User, on_delete = models.CASCADE)
    id_user = models.IntegerField()
    bio = models.TextField(blank=True)
    profileimg = models.ImageField(upload_to = 'profile_images', default= 'blank-profile-picture.png')
    location = models.CharField(max_length = 100, blank = True)

    def __str__(self):
        return self.user.username

下面是www.example.com文件中的介质文件夹settings.py。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'core',
]
STATIC_URL = 'static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

MEDIA_URL ='/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

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

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('core.urls')),
] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

照片未显示。

wn9m85ua

wn9m85ua1#

你试图以错误的方式获取图像。
相反,您可以使用

src="/media/{{user_profile.profileimg}}"

如果不起作用,请尝试删除媒体前的“/”。
如果问题仍然存在,请回复此邮件。

f4t66c6m

f4t66c6m2#

哦,天啊。我怎么会错过呢。
我朋友的问题在于视野。
在函数中添加以下内容:

if request.method == "POST" and "image" in request.FILES:

在请求图像时,仅将图像放置在下面给出的列表中的变量中。

image= request.FILES['image']

我希望这个问题可以解决。如果问题仍然存在,请回复。

vlju58qv

vlju58qv3#

简单地你可以试试这个办法:

<img width = "100" height = "100" src="/media/{{user_profile.profileimg}}"/>

现在这个图像将显示
注意:如果您上传的图像保存在媒体文件夹中,那么上面的代码将工作。
根据您的模型字段profileimg,您应该在upload_to中添加正斜杠:
它一定像下面这样:

upload_to='profile_images/'

并确保您已将此添加到您的主URL中:

urlpatterns = [

]+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
klh5stk1

klh5stk14#

谢谢你的回答我找到解决办法了

<form action="" method ="POST" enctype = "multipart/form-data">

setting.html文件中缺少此加密类型此加密类型工作正常,图像显示正确

相关问题