-1

モデルファイルに次のコードがあります。

sn = models.CharField(max_length=20, unique=True,
                          error_messages={'unique': 'This SN has already been created. <br/> Please <a href="/?sn=xxx">search it</a> instead'})

私は2つのことを達成したいと思います:

  1. エラー メッセージをテキストではなく HTML として表示します。試してみましたがmark_safesafe運が悪かった-HTMLはエスケープされていませんが、その効果はありません(メッセージは「」で囲まれています): ここに画像の説明を入力
    ソース:
    ここに画像の説明を入力

  2. URL の「xxx」の代わりに、ユーザーが入力した値を指定します

私の現在の解決策は、テンプレートのエラー メッセージを確認することです。それが固有のエラーである場合は、手動で URL 情報を追加しますが、これは正しくないと感じています...
誰かがこれに対する明確な解決策を持っていますか?

4

2 に答える 2

1

検証メッセージをエスケープしていません:

from django.utils.html import mark_safe
sn = models.CharField(max_length=20, unique=True,
                      error_messages={'unique': mark_safe('This SN has already been created. <br/> Please <a href="/?sn=xxx">search it</a> instead')})
于 2013-04-02T18:18:45.813 に答える
0

フィールドのerror_messages属性でHTMLを使用することはお勧めできません。

フィールドのerror_messageは、そのようなエラーが発生する可能性のあるアプリの任意の場所に表示されるように十分に一般的である必要があります。メッセージはある種のアイテム作成フォームに固有であるため、エラーを処理するのに最適な場所は、そのフォームの対応するフィールドの検証中です。

検証中にエラー通知を動的に作成できるため、プレースホルダー「xxx」の代わりに値を挿入する方が自然です(その値をURLエンコードすることを忘れないでください。そうしないと、セキュリティバグが発生します)。

于 2013-03-11T11:46:40.617 に答える