2016-04-28 18 views
0

我使用materializecss爲我的django網站提供了一些素材元素。我已經把一個表單(使用html的'舊'方式)放在一起,但現在我意識到我需要使用django表單來代替。問題是,這些表單不適合在列系統中構建的實體(它們使用類來確定行和列間距)。 Here是迄今爲止設置的佈局示例。但是,通過form.py定義表單時,它會爲每個圖層分配一個輸入。在Django中指定特定的表單格式

我的問題是:我能做些什麼,或者a)讓django使用html定義的表單或者b)使'表單模板'爲輸入字段提供合適的類?

如果你想看到代碼,我可以發佈一些,但我是一個相當新的編碼器,所以它很混亂。

謝謝!

+0

因爲我不能添加超過2個鏈接:這裏是Django窗體的樣子:http://i.imgur.com/woXXhKu.png – arlyon

+0

你有問題的代碼在哪裏? – obayhan

回答

0

我有三種方法可以想到我的頭頂。

如果您想完全控制HTML表單,請在Django模板或HTML表單中簡單地映射您的字段的名稱,以匹配Django表單中的基礎字段名稱。這樣,當發回你的視圖時,Django會自動將張貼的字段與Django表單域連接起來。

例如,如果你在你的Django形式有場username(或者Django的模型,如果使用的ModelForm),你可以有一個元素<input type="text" name="username" maxlength="40">你的HTML表單上(你可以風格,你需要的任何方式)是Django會高高興興解析你的Django表單域,假設你的視圖是正確的。 There is an example of this method in the Django documentation.

另一種方法是在Django表單定義中自定義Django表單字段小部件。 The Django documentation talks a little bit about how to do this。這非常適合一次性使用,但如果您希望重用小部件,可能不是最好的方法。

最後的辦法是將Django表單字段小部件子類自動提供您需要的任何屬性。例如,我們使用Bootstrap,並將幾乎所有我們用來利用Bootstrap類的小部件進行了分類。

class BootstrapTextInput(forms.TextInput): 
    def __init__(self, attrs=None): 
     final_attrs = {'class': 'form-control'} 
     if attrs is not None: 
      final_attrs.update(attrs) 
     super().__init__(attrs=final_attrs) 

然後它只是讓Django的形式知道哪個小部件使用的表單字段的問題。

class UsernameForm(forms.ModelForm): 
    class Meta: 
     model = auth.get_user_model() 
     fields = ['username'] 
     widgets = {'username': BootstrapTextInput()} 

希望這會有所幫助。乾杯!

+0

謝謝咖啡因,看起來像一個最適合的解決方案,但我會嘗試所有的靈活性。 – arlyon