Django上载到动态(ish)filenam

2024-09-30 16:28:02 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的表格:

class AvatarUploadForm(forms.Form):
    avatar = forms.ImageField(label='Image', help_text='Maximum size: 100x100px')

    # Validation stuff down here.

型号:

^{pr2}$

以及当前未完成且可能存在缺陷的观点:

@login_required
def user(request, username):
    user = get_object_or_404(User, username=username)
    profile = user.profile
    if request.user == user:
        if request.method == 'POST':
            form = AvatarUploadForm(request.POST, request.FILES)
            if form.is_valid():
                 profile.avatar = request.FILES['avatar']
                 profile.save()
                 return render_to_response('forum/user.html', {'profile_user': user, 'profile': profile},
                     context_instance=RequestContext(request))
            else:
                form = AvatarUploadForm()

            return render_to_response('forum/user.html', { 'profile_user': user, 'profile': profile, 'form': form },
                context_instance=RequestContext(request))

    return render_to_response('forum/user.html', { 'profile_user': user, 'profile': profile })

我想要的是保留原始文件扩展名、.png、.gif或其他任何文件,但将文件名更改为用户的用户名或用户名。在

因为注册时,用户不上传头像,当你查看头像上传表单的页面时,会创建个人资料,我们可以假设用户配置文件已经存在。在

我认为解决方法在于将upload泳设为可调用的,但我不完全确定。在

谢谢。在


Tags: to用户formreturnifresponserequesthtml
1条回答
网友
1楼 · 发布于 2024-09-30 16:28:02

你是对的。upload\u to可以是可调用的。这是我的一个项目的节选,你可以根据自己的要求进行调整。我要求你有更多的灵活性。在

import os
import random
import string
from datetime import datetime

....

def generate_random_string(digit_length=6, char_length=6):
    digits = "".join( [random.choice(string.digits) for i in xrange(6)] )
    chars = "".join( [random.choice(string.letters) for i in xrange(6)] )
    return digits + chars

def item_upload_to(instance, filename):
    file_root, file_ext = os.path.splitext(filename)
    date = datetime.now().strftime("%Y/%m/%d")
    random_name = generate_random_string() + file_ext
    return '/'.join(['user-media',date, random_name])

....


class GenericImage(models.Model):
    user = models.ForeignKey(User, default=NEWAVENUE_USER_ID)
    original_image = models.ImageField(upload_to=item_upload_to)

相关问题 更多 >