2017-01-10 4 views
1

Версия Python: 3.6.0 и версии Django: 1.10.5Django-Simple-Captcha добавить CSS

Я прочитал всю документацию о Django-простой-капчи, и я просто найти это предложение, чтобы modifie вынести из Спам-фильтр:

(используется по умолчанию для: и '% (изображение) s% (hidden_field) s% (text_field) s')

Я не хочу, чтобы изменить Patern для всех captchas, Мне просто нужно cha nge current captcha возможно с добавлением attrs = {} в forms.py как и другие поля.

Пример регулярного syntaxe, кто работает:

name = forms.CharField(widget=forms.TextInput(attrs={'class': 'special'})) 

На данный момент, у меня есть что-то вроде этого Captcha : img + textfield в визуализации HTML. И если возможно, я хочу что-то вроде the documentation.

Я использую в forms.py:

class RegisterForm(forms.ModelForm): 
    ... 
    captcha = CaptchaField(label='Are you an human? ') 

И в page.html:

<div class="fieldWrapper input-field col-xs-12"> 
    <i class="material-icons">person_pin</i> 
    <label for="id_captcha">{{ form.captcha.label }}</label> 
    {{ form.captcha }} 
</div> 

CaptchaField визуализации 3 Differents поля, то HTML рендеринга, как по умолчанию (код в браузере) :

<img src="/captcha/image/f5dc943d14ecb5674a1490468567bcb186178228/" alt="captcha" class="captcha"> 
<input id="id_captcha_0" name="captcha_0" type="hidden" value="f5dc943d14ecb5674a1490468567bcb186178228"> 
<input autocomplete="off" id="id_captcha_1" name="captcha_1" type="text"> 

Я стараюсь находке возможность использовать аргумент «AttrS» в виджете капчи добавить CSS Ф.О. r текстовое поле, как и другое поле Django. Так что я пытаюсь что-то подобное в моем form.py:

captcha = CaptchaField(label='Are you an human? ', widget=forms.TextInput(attrs={'class':'white-text'})) 

Но это не сработало, потому что поле по умолчанию генерируется captchafield() было заменено другим текстовым поле поля (и идентификатор является неправильным для проверки из captcha или у меня есть только текстовое поле, а не изображение).

Так я продолжаю искать решение, и я пытаюсь понять состав о структуре CaptchaField:

captcha.__dict__ 
{'require_all_fields': True, 'required': True, 'label': 'Are you an human ? ', 'initial': None, 'show_hidden_initial': False, 'help_text': '', 'disabled': False, 'label_suffix': None, 'localize': False, 'widget': <captcha.fields.CaptchaTextInput object at 0x000001F929C16198>, 'creation_counter': 28, 'error_messages': {'required': <django.utils.functional.lazy.<locals>.__proxy__ object at 0x000001F9290A4828>, 'invalid': <django.utils.functional.lazy.<locals>.__proxy__ object at 0x000001F929C16E48>, 'incomplete': <django.utils.functional.lazy.<locals>.__proxy__ object at 0x000001F9290ED080>}, 'validators': [], 'fields': (<django.forms.fields.CharField object at 0x000001F929C16080>, <django.forms.fields.CharField object at 0x000001F929C167B8>)} 

captcha.__dict__.keys() 
dict_keys(['require_all_fields', 'required', 'label', 'initial', 'show_hidden_initial', 'help_text', 'disabled', 'label_suffix', 'localize', 'widget', 'creation_counter', 'error_messages', 'validators', 'fields']) 

Так я поиск, чтобы добавить «AttrS» аргумент в моем TextInput поле:

captcha.widget.widgets[1] 
<django.forms.widgets.TextInput object at 0x000001F929C16EB8> 

captcha.widget.widgets[1].__dict__ 
{'attrs': {}} 

Теперь я пытаюсь модифицировать attrs поля TextInput, которые создают рендер, поэтому я вижу MultiWidget, которые строят 3 поля on the doc:

class BaseCaptchaTextInput(MultiWidget): 
    """ 
    Base class for Captcha widgets 
    """ 
    def __init__(self, attrs=None): 
     widgets = (
      HiddenInput(attrs), 
      TextInput(attrs), 
     ) 
     super(BaseCaptchaTextInput, self).__init__(widgets, attrs) 

ответ

0

привет вы можете переопределить в шаблоне:

CAPTCHA,/text_field.html

и добавить свой собственный класс в HTML-код в text_field.HTML прост:

<input autocapitalize="off" autocomplete="off" autocorrect="off" spellcheck="false" id="{{id}}_1" name="{{name}}_1" class="white-text" type="text" /> 

refrence to documention

+0

'Я не хочу, чтобы изменить Patern для всех каптч, мне просто нужно изменить текущий капча может быть, с добавить AttrS = {} в forms.py как и другие поля. «Я пытаюсь найти правильное решение для редактирования captcha в * forms.py * – Buky