# Good
ValidationError(
_('Invalid value: %(value)s'),
params={'value': '42'},
)
# Bad
ValidationError(_('Invalid value: %s') % value)
डॉक्स वास्तव में does not स्पष्टीकरण दें कि यह बुरा है/अच्छा के अनुसार
। क्या कोई ठोस उदाहरण दे सकता है?
इसके अलावा, जब मैं form.errors
का निरीक्षण करता हूं, तो मुझे 'Invalid: %(value)s'
जैसे कुछ मिलता है। मैं सत्यापन त्रुटियों से पैरा कैसे प्राप्त करूं और उन्हें त्रुटि संदेश में विभाजित कर सकता हूं?
संपादित
तो यह अच्छा माना जाता है?
ValidationError(
_('Invalid value: %(value)s') % {'value': '42'},
)
मुझे लगता है कि असली सवाल यह है: क्यों params
तर्क के माध्यम से अलग-अलग चर पारित? त्रुटि संदेश में सीधे इंटरपोलेट क्यों न करें (नाम के लिए नाम या स्थितिगत इंटरपोलेशन को अनदेखा करें) ???
संपादित
ठीक है, स्रोत @https://github.com/django/django/blob/stable/1.5.x/django/forms/forms.py मुझे नहीं लगता कि वहाँ के बाद से फार्म करता भी ValidationError वस्तु ही नहीं बचा ValidationError के पैरामीटर को पुनः प्राप्त करने के लिए किसी भी तरह से है से। नीचे कोड देखें।
class ValidationError(Exception):
"""An error while validating data."""
def __init__(self, message, code=None, params=None):
import operator
from django.utils.encoding import force_text
"""
ValidationError can be passed any object that can be printed (usually
a string), a list of objects or a dictionary.
"""
if isinstance(message, dict):
self.message_dict = message
# Reduce each list of messages into a single list.
message = reduce(operator.add, message.values())
if isinstance(message, list):
self.messages = [force_text(msg) for msg in message]
else:
self.code = code
self.params = params
message = force_text(message)
self.messages = [message]
class Form:
....
def _clean_fields(...):
....
except ValidationError as e:
self._errors[name] = self.error_class(e.messages) # Save messages ONLY
if name in self.cleaned_data:
del self.cleaned_data[name]
तो मेरे सवाल क्यों उपयोग नहीं 'ValidationError ( _ (है ओवरराइड करने के लिए में 'अवैध मान:% (मूल्य) s')% { 'मूल्य ':' 42 '}, ) ' – Lucas
कृपया मेरे संपादन को – Lucas
से ऊपर देखें यदि आप सीधे संदेश में चर को जोड़ते हैं, तो इसे ओवरराइड करना कठिन होता है। उदाहरण के लिए, आप ['error_messages'] (https://docs.djangoproject.com/en/1.5/ref/forms/fields/#error-messages) तर्क का उपयोग करते समय प्लेसहोल्डर का उपयोग करने में सक्षम नहीं होंगे। – Alasdair