簡體   English   中英

Django表單模板定制

[英]Django form template customization

django的新手(和一般python)。 我正在嘗試自定義其中一個表單,並想知道執行此操作的最佳方法。

以下面的示例為例,該表單具有3個字段,兩個字段用於輸入重量,一個字段用於目標日期。

class BasicFitnessGoalForm(forms.ModelForm):

    class Meta:
        model = BasicFitnessGoal
        fields = ('currentWeightKg','targetWeightKg','targetDate')
        widgets = {
            'targetDate': forms.DateInput(attrs={'class':'formdatepicker'}),
        }
        labels = {
            'currentWeightKg' : "Current Weight",
            'targetWeightKg' : "Goal Weight",
            'targetDate' : 'Goal Date'
        }

我希望能夠使用諸如GoalForm.as_p()之類的東西在我的模板中顯示此表單,該表單會生成如下所示的html:

<p>
 <label></label><input><input>...

我想做的是在權重字段上的輸入標簽后插入一個額外的元素,並自定義text和css類。 所以我最終得到這樣的東西:

<p>
<label>Current Weight</label><input type=Number...><span class="customCss">Kg (or text I enter</span>
</p>

那么,是否有必要在模型類中完成此操作? 我知道我可以使用javascript或通過遍歷模板中的字段而不是使用form.as_p標記來做到這一點。 但是我想重用它,因此如果我可以創建一個方法在想要使用它的任何地方輸出所需的html,那么它是最干凈的。

我看過一些示例,您可以在as_foobar之類的表格上設置方法,並返回self.html_output。 但是我看到那只允許指定“ normal_row”,“ error_row”等值。我想為此表格編寫自定義模板,然后從模型上的方法返回html,然后可以從模板中訪問它。 (或對此模型覆蓋as_p方法,以根據字段返回自定義html)。

希望這是有道理的。

使用注釋中建議的自定義窗口小部件是一個選項,另一個選擇是手動遍歷字段。

<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form.non_field_errors }}
    {% for field in form %}

        <div class="fieldWrapper">
            {{ field.errors }}
            {{ field.label_tag }} {{ field }}
            {% if field.help_text %}
                  <p class="help">{{ field.help_text|safe }}</p>
            {% endif %}

            {% if field.id_label = id_currentWeightKg" %}
                <span class="customCss">Kg (or text I enter</span>
            {% endif %}
        </div>
    {% endfor %}
    <input type="submit" value="Submit" />
</form>

有關其他信息,請參閱手冊中的“ 循環表單字段”部分。

在執行此操作之前,請查看HTML源代碼並確認id_currentWeightKg是該字段的正確ID。 如果不使用,請更換正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM