[英]Django: list object is not callable in forms.py using validators and RegexValidator
我正在嘗試將 RegexValidator 驗證器添加到聯系表單 (forms.py) 以防止垃圾郵件發送者在消息中添加http://
和https://
鏈接。
我在 forms.py 的頂部包含from django.core.validators import RegexValidator
forms.py
。
這個 general_message 示例在不使用驗證器時工作正常:
general_message = forms.CharField(label='General message*', required=True, widget=forms.Textarea(
attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8}
))
但是我在下面的示例中收到錯誤'list' object is not callable
:
general_message = forms.CharField(label='General message*', required=True, widget=forms.Textarea, validators=[RegexValidator(regex=r'^(?!.*\bhttps?\b).+$', message="No http or https allowed", code="invalid")] (
attrs={'class': 'form-control', 'maxlength': '1000', 'rows': 8} ))
看來我的括號和圓括號是正確的。 是什么導致了錯誤?
Python 3.9, Django 4.0.1
編輯 4/20/22:正則表達式匹配http://
和https://
首先,我建議使用TextField
而不是CharField
。 一般CharField
用於一小段文本, TextField
用於大文本。
如果您堅持使用CharField
,則應該以您可以理解其作用的方式格式化這一長行代碼。 例如:
general_message = forms.CharField(
label='General message*',
required=True,
widget=forms.Textarea,
validators=[
RegexValidator(
regex=r'http(s)?|HTTP(s)?',
message="No http or https allowed",
code="invalid"
)
]
(
attrs={
'class': 'form-control',
'maxlength': '1000',
'rows': 8
}
)
)
現在你看到你有一個()
緊跟在[]
for validators
之后。 這看起來像一個 function 電話。 但這沒有任何意義,因為您不能調用列表,如錯誤所述。
通過使用一致的格式和縮進,您可以輕松避免此類問題。 我上面顯示的格式是許多可用的 styles 之一。 只需選擇一些東西並堅持下去。
要解決此問題,您只需移動代碼以使其正確對齊。 看起來您將validators
放在Textarea
和()
之間的錯誤位置以調用其構造函數。 正確的代碼應該是這樣的:
general_message = forms.CharField(
label='General message*',
required=True,
widget=forms.Textarea(
attrs={
'class': 'form-control',
'maxlength': '1000',
'rows': 8
}
),
validators=[
RegexValidator(
regex=r'http(s)?|HTTP(s)?',
message="No http or https allowed",
code="invalid"
)
]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.