django настраивает метки форм - PullRequest
3 голосов
/ 28 апреля 2010

У меня проблема с настройкой меток в форме Django

Это код формы в файле contact_form.py:

.
from django import forms

class ContactForm(forms.Form):
    def __init__(self, subject_label="Subject", message_label="Message", email_label="Your email", cc_myself_label="Cc myself", *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)

        self.fields['subject'].label = subject_label
        self.fields['message'].label = message_label
        self.fields['email'].label = email_label
        self.fields['cc_myself'].label = cc_myself_label

    subject = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
    message = forms.CharField(widget=forms.Textarea(attrs={'rows':15, 'cols':80}))
    email = forms.EmailField(widget=forms.TextInput(attrs={'size':'60'}))
    cc_myself = forms.BooleanField(required=False)

Вид, которым я пользуюсь, выглядит следующим образом:

def contact(request, product_id=None):
    .
    .
    .
    if request.method == 'POST':
        form = contact_form.ContactForm(request.POST)
        if form.is_valid():
            .
            .
        else:
            form = contact_form.ContactForm(
                subject_label = "Subject",
                message_label = "Your Message",
                email_label = "Your email",
                cc_myself_label = "Cc myself")

Строки, используемые для инициализации меток, в конечном итоге будут строками, зависящими от языка, то есть английского, голландского, французского и т. Д.

Когда я проверяю форму, электронное письмо не отправляется, и вместо страницы перенаправления форма возвращается с:

<QueryDict: {u'cc_myself': [u'on'], u'message': [u'message body'],
u'email':[u'info@umx.com'], u'subject': [u'test message']}>:

там, где раньше была метка темы. Это, очевидно, словарь, представляющий поля формы и их содержимое.

Когда я изменяю файл contact_form.py на:

from django import forms

class ContactForm(forms.Form):
    """
    def __init__(self, subject_label="Subject", message_label="Message", email_label="Your email", cc_myself_label="Cc myself", *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)

        self.fields['subject'].label = subject_label
        self.fields['message'].label = message_label
        self.fields['email'].label = email_label
        self.fields['cc_myself'].label = cc_myself_label
    """
    subject = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
    message = forms.CharField(widget=forms.Textarea(attrs={'rows':15, 'cols':80}))
    email = forms.EmailField(widget=forms.TextInput(attrs={'size':'60'}))
    cc_myself = forms.BooleanField(required=False)

т.е. отключив инициализацию, тогда все работает. Данные формы отправляются по электронной почте, и появляется страница перенаправления. Поэтому очевидно, что код инициализации неправильный. Но что?

Я был бы очень признателен за помощь.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2010

Вы должны изменить форму init decleration, что QueryDict, который будет напечатан, является request.GET или request.POST, который вы передаете в качестве первого аргумента при инициализации формы.

Я думаю, меняя это

def __init__(self, subject_label="Subject", ...

к этому

def __init__(self, data=None, subject_label="Subject", ... ...):
    super(ContactForm, self).__init__(data, *args, **kwargs)
    ...

решит вашу проблему.

2 голосов
/ 28 апреля 2010

Я думаю, что вы подходите к проблеме неправильно.Вместо этого вы должны использовать модуль internationalisatoin .

Таким образом вы можете получить свою форму следующим образом:

class ContactForm(forms.Form):
    subject = forms.CharField(label=_('contact_form_subject'), widget=forms.TextInput(attrs={'size':'60'}))

Система интернационализации Django автоматически вставит правильный перевод дляВы, если вы предоставляете файлы перевода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...