8

テンプレートでdjango form.non_field_errors.as_textをフォーマットするには、順序付けられていないリストにしたり*、先頭に追加したりしないようにするにはどうすればよいですか?

{{ form.non_field_errors.as_text }}*テキストの前に を付けてエラーを表示します。

This django ticketは、なぜ*削除されないのかを説明するのにも役立ちましたが、それは私には役に立ちません。私はしたくありません*

{{ form.non_field_errors }} と {{ form.non_field_errors.as_ul }} の両方が順序なしリストとして表示されますが、順序なしリストは必要ありません。

4

3 に答える 3

20
{% for error in form.non_field_errors %}
    {{error}}
{% endfor %}

エラーのリストをテキストとして呼び出すと、リストとして表示しようとします。リストをループしてエラー自体を取得するだけで、独自のスタイルを適用できます。

詳細については、django プロジェクトのWeb サイトを参照してください。

于 2013-03-17T16:49:14.587 に答える
0

form.non_field_errorsたとえば、私の場合、Django Widget Tweaksを使用して、問題のフィールドの横にあるこのスクリーンショットのようなツールチップを表示したかったのです。

プロジェクト/アプリ/テンプレート/template.html

{% render_field field class="form-control is-invalid" data-toggle="tooltip" title=field.errors.as_text %}

テンプレート コードをいじって HTMLtitle属性を 1 つにまとめて渡す代わりに、@oblalexのヒントに従い、アスタリスクのないメソッドを使用して独自の変更済みErrorListクラスを作成しました。as_text

プロジェクト/アプリ/utils.py

from django.forms.utils import ErrorList

class MyErrorList(ErrorList):
"""
Modified version of the original Django ErrorList class.

ErrorList.as_text() does not print asterisks anymore.
"""
    def as_text(self):
        return '\n'.join(self)

as_text()関数が上書きされたので、クラスをorの引数MyErrorListとして渡すことができます。私の場合はフォームセットのように:error_classFormModelFormModelForm

プロジェクト/アプリ/views.py

from django.forms import formset_factory
from .forms import InputForm
from .utils import MyErrorList

def yourView(request):
    InputFormSet = formset_factory(InputForm)
    formset = InputFormSet(error_class=MyErrorList)

    context = {'formset': formset}
    return  render(request, 'template.html', context)

ツールチップは、アスタリスクなしで次のようになります。

error_classビューでフォームをインスタンス化するたびに渡す代わりに、このワンライナーをフォーム クラスに追加するだけです ( @Danielからのこの回答を参照してください)。

プロジェクト/アプリ/forms.py

from django import forms
from .utils import MyErrorList

class InputForm(forms.ModelForm):

    def __init__(self, *args, row, **kwargs):
        super(InputForm, self).__init__(*args, **kwargs)
        self.error_class = MyErrorList
于 2019-07-19T16:33:05.977 に答える