2016-08-03 20 views
0

我正在使用Django表單來驗證特定的註冊頁面。該表被設置爲這樣:爲什麼我的Django表單模板刪除空格後的所有數據?

class MemberForm(forms.Form): 
    email = forms.EmailField(label='Email', required=True) 
    password = forms.RegexField(label='Password', widget=forms.PasswordInput, required=True, regex=r'^(?=.*[A-Za-z])(?=.*\d)[\S]{8,}$') 
    confirm_password = forms.CharField(label='Confirm Password', widget=forms.PasswordInput, required=True) 
    full_name = forms.CharField(label='Full Name', required=True) 
    pref_name = forms.CharField(label='Preferred Name', required=False) 
    phone = forms.RegexField(label='Phone', regex=r'^\+?1?\d{9,15}$', required=True) 
    address = forms.CharField(label='Address', required=True) 
    city = forms.CharField(label='City', required=True) 
    provinces = forms.ChoiceField(label='Provinces', choices=PROVINCE_CHOICES, required=True) 
    postal_code = forms.RegexField(label='Postal Code', regex=r'^([A-Z][0-9][A-Z]\s[0-9][A-Z][0-9])$') 
    dob = forms.DateField(label='Birthday', required=True) 
    occupation = forms.CharField(label='Occupation', required=True) 

一切都在這方面做工精細,形式接受一切它應該和拒絕一切它應該。如果表單無效,我再次渲染它。這一切都在以下視圖中完成:

def create_member(request): 
    form = forms.MemberForm(request.POST or None) 

    if request.method == 'POST': 
     if form.is_valid(): 
      #redirect 

    provinces = Provinces.objects.all() 
    return render(request, 'party/adminCreateAccount2.html', {'form': form, 'provinces': provinces, 'today': str(now_date())}) 

因此,如果表單無效,我只需保留在頁面上並重新使用當前表單。但是,當表單重新加載時,出於某種原因,具有空間的所有數據將在顯示空間後擦除所有空間。例如,如果我使用'測試測試'作爲我的全名,那麼將所有其他部分留空,當頁面重新加載時,我只會看到'測試'。

使用下面的自定義模板顯示我的形式:

{% for field in form %} 
    <div class="form-row grp-row grp-cells-1 {{ field.html_name }}"> 
     <div class="field-box l-2c-fluid l-d-4"> 
      <div class="c-1"> 
       <label {% if field.field.required %} class="required" {% endif %} for={{ field.html_name }}>{{ field.label }}</label> 
      </div> 

      <div class="c-2"> 
       <input class="vTextField" type="text" name={{ field.html_name }} id={{ field.html_name }} value={{ field.data|default_if_none:"" }}> 
      </div> 
     </div> 
    </div> 
{% endfor %} 

我試圖輸出{{ field.data|default_if_none:"" }}輸入正確的旁邊,它顯示(在我們的例子「測試測試」)的整個字符串,所以我完全是因爲難倒我知道正確的數據正在通過。任何想法爲什麼它被改變的輸入值?

回答

0

Django沒有這樣做,您的瀏覽器是。你需要把變量的值加引號:

value="{{ field.data|default_if_none:"" }}" 

不過說真的,你不應該輸出領域是這樣的:使用Django做正確,只有{{ field }}

+0

這就是我最初嘗試的,但總是默認顯示'<輸入'而不是任何東西。任何理由爲什麼它可能會這樣做? – Written

+0

我的意思是你應該使用它來代替整個輸入標籤。您可以在表單定義中添加額外的html類。 –

相關問題