如何使表单中random.choice()生成的占位符每次刷新都更新?
解决Django表单每次刷新页面更新随机占位符的问题
你当前的代码之所以只有重启服务器或修改文件时才更新占位符,是因为类Meta中的代码在类加载时仅执行一次,后续请求不会重新计算随机值。要实现每次刷新页面都更新占位符,需要在表单实例化时动态设置占位符,具体修改如下:
修改后的代码
import random from django import forms from .models import Entry class EntryForm(forms.ModelForm): # 把占位符列表定义在类级别,方便__init__方法调用 my_placeholders = [ 'The fact that...', 'I am sure that...', 'It is awesome to...', 'I wish this was...', 'I always wanted to know how...', 'The reason I am writing this is...' ] class Meta: model = Entry fields = ['text'] labels = {'text': ''} # 先只定义textarea的cols属性,不设置placeholder widgets = {'text': forms.Textarea(attrs={'cols': 80})} def __init__(self, *args, **kwargs): # 调用父类的初始化方法 super().__init__(*args, **kwargs) # 每次实例化表单时,随机选择一个占位符 random_placeholder = random.choice(self.my_placeholders) # 给text字段的widget设置动态生成的占位符 self.fields['text'].widget.attrs['placeholder'] = random_placeholder
原理说明
- 表单的
__init__方法会在每次请求页面、实例化表单时执行,因此每次刷新页面都会重新生成随机占位符。 - 原来的写法把随机值计算放在类Meta中,只会在类第一次加载时执行,后续请求复用已生成的固定值,所以无法动态更新。
内容的提问来源于stack exchange,提问作者user22971695
相关产品推荐
相关产品推荐

