You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使表单中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:12:29