问题描述
我正在使用 Django 上传用户头像,我的问题是,如何从模板中删除默认字符串“urrently: avatar/default.png Clear”
型号:
class User(AbstractUser):
nickname1 = models.CharField(max_length=30,blank=True,null=True,verbose_name='昵称')
url = models.URLField('个人网址',help_text='提示:网址必须填写以http开头的完整形式')
avatar = ProcessedImageField(upload_to='avatar',default='avatar/default.png',verbose_name='头像',processors=[ResizetoFill(100,100)],# 处理后的图像大小
format='JPEG',# 处理后的图片格式
options={'quality': 95} # 处理后的图片质量,blank=True
)
identifier = models.CharField(max_length=40,unique=True,null=True)
...
USERNAME_FIELD = 'identifier'
def save(self,*args,**kwargs):
if len(self.avatar.name.split('/')) == 1:
self.avatar.name = self.username + '/' + self.avatar.name
super(User,self).save()
class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name
ordering = ['-id']
def __str__(self):
return self.username
网址:
path('<str:username>/',views.account_profile,name = 'process'),
view.py:
@login_required
def account_profile(request,username):
profile_user = get_object_or_404(User,username=username)
messages = []
if request.method == 'POST':
form = UserDetailForm(request.POST,request.FILES,instance=request.user)
if form.is_valid():
form.save()
messages.append('资料修改成功!')
form = UserDetailForm(instance=request.user)
return render(request,'user/user_detail.html',context={'form': form,'messages': messages,'profile_user': profile_user,})
形式:
class UserDetailForm(ModelForm):
class Meta:
model = User
fields = ['avatar',]
模板:
<form class="profile" method="post" enctype="multipart/form-data"
action="/<str:username>/">
{% csrf_token %}
{{ form|crispy }}
<div class="avatar">
<img class="img-rounded" src="{{ request.user.avatar.url }}">
</div>
<button class="primaryAction" type="submit">更新资料</button>
</form>
在表单中我只在那里设置了归档头像,但总是有一个字符串“当前:头像/默认.png清除”
有朋友知道怎么去掉这个字符串吗?
解决方法
最好覆盖此模板:
django/forms/widgets/clearable_file_input.html
并删除这一点:
{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>
您可以通过子类化小部件 django.forms.widgets.ClearableFileInput
来覆盖初始文本,但这仍会呈现先前的值(没有标签)。