【问题标题】:Django update template image after save it on server storage将模板图像保存到服务器存储后,Django 更新模板图像
【发布时间】:2015-01-20 07:11:06
【问题描述】:

我对文件上传有疑问并在模板上刷新它。 在我看来,我有一个文件保存系统的自定义变体:

sp = os.path.join(os.path.dirname(__file__), '../media/avatars')
av_name = os.path.join(sp, u.username + "_avatar.jpg") 
dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
ImageData = request.POST.get('u_avatar')
ImageData = dataUrlPattern.match(ImageData).group(2)
ImageData = base64.b64decode(ImageData)
ava = open(av_name, 'wb')
ava.write(ImageData)
ava.close()

而且效果很好。我可以上传和更新头像并将其以自定义名称保存在媒体文件夹中。但是当我尝试保存一个新文件时,它不会在模板上刷新!我的意思是该文件正确保存,我在服务器文件夹中看到一个新图像,但模板呈现它们的旧版本。当我尝试打开图片链接时,我仍然看到一个旧文件。

我认为原因是某种缓存,但我不明白它是如何工作的。

请您帮帮我,每次上传后如何刷新图像?

编辑:

这是我的完整观点:

def edit(request):
u = request.user
p = get_object_or_404 (Profile, user=request.user)
if request.method == 'POST':
    profile_form = ProfileForm(request.POST)
    if profile_form.is_valid():
        if request.POST.get('u_avatar'):
            sp = os.path.join(os.path.dirname(__file__), '../media/avatars')
            av_name = os.path.join(sp, u.username + "_avatar.jpg")
            os.remove(av_name)
            dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
            ImageData = request.POST.get('u_avatar')
            ImageData = dataUrlPattern.match(ImageData).group(2)
            ImageData = base64.b64decode(ImageData)
            ava = open(av_name, 'wb')
            ava.write(ImageData)
            ava.close()
        profile = profile_form.save(commit=False)
        profile.user = u
        profile.avatar = str("/media/avatars/" + u.username + "_avatar.jpg")
        profile.filled = True
        if p.rate < 0.5:
            profile.rate = 0.5
        else:
            profile.rate = p.rate
        profile.save()
        return HttpResponseRedirect('profile')
else:
    profile_form = ProfileForm()
return render(request, 'profile_edit.html', {'profile_form': profile_form})

这是我在模板上的头像:

<div class="lavatar"><a href="/profile"><img src="{{ user.profile.avatar }}" class="img-circle"></a></div>

顺便说一句,我使用 CharField 作为头像而不是 ImageField 或 FileField。可能有问题。

EDIT2

现在我发现了一个有趣的新事实:图像会在一段时间后更新。我上传了一张新图片,大约 1,5 - 2 小时没有接触网站。头像也刷新了。

【问题讨论】:

  • 您是否实现了视图或模板缓存?您是否清除了浏览器的缓存?您是否在模型上使用 cached_property 来显示图像?您是否测试过您的代码实际上正在按照您的预期更新文件?您尝试过什么调试问题?
  • 设置 django.middleware.cache.CacheMiddleware' 和 CACHE_MIDDLEWARE_SECONDS = 0 - NOTHING。
  • 这实际上并没有回答我的问题。你在缓存视图吗?模板?财产?
  • 对不起,我没有时间完成。设置 django.middleware.cache.CacheMiddleware' 和 CACHE_MIDDLEWARE_SECONDS = 0 - 无。删除了 Chrome 缓存 - 没有。系统第一次运行良好,但如果我想更改头像,它只在服务器文件夹中更改。而且我没有在任何地方使用缓存。
  • 您能否添加您的模板并查看显示图像的代码?

标签: django image django-templates


【解决方案1】:

终于发现问题了!

云闪!我在页面规则上设置了“绕过缓存”,它似乎运行良好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2023-03-21
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多