私のdjangoで動くアプリでは、 "IntegrityError"が発生する可能性のある明白なケースが1つしかありません。
どうすればそのエラーを検出し、テンプレートを使用してメッセージを表示できますか?Django:整合性エラーをキャッチし、テンプレートを使用してカスタマイズされたメッセージを表示
答えて
tryとcatchを使用してください。
from django.db import IntegrityError
from django.shortcuts import render_to_response
try:
# code that produces error
except IntegrityError as e:
return render_to_response("template.html", {"message": e.message})
テンプレートにメッセージを使用することができます。 Jill-Jênn Vieため
EDIT
おかげで、あなたはe.__cause__
、as described hereを使用する必要があります。
最も簡単な解決策:のみIntegrityErrorをキャッチし、あなたのレンダリングされたテンプレートでのHttpResponseを返すprocess_exception
を実装するミドルウェアを書き、このミドルウェアは、それが(多くのためhttps://docs.djangoproject.com/en/dev/topics/http/middleware/#process-exceptionをCF)の前に呼び出されるように、ミドルウェアのデフォルトのエラー処理の後であることを確認してください。
私があなただったら、「IntegrityErrorが発生する可能性があるのは明らかなケースが1つしかないので、例外をログに記録して電子メールアラートを送信することを強くお勧めします。あなたのミドルウェア。
ミドルウェアに入れても、アプリケーション内のエラーは検出されませんが、プロジェクト内のすべてのアプリケーションで検出されます。 –
@ChrisWesseling:それは完全に同意する、私は "私はそのようなことを想定していない"と述べた理由は、 "IntegrityError"が発生する可能性があるただ一つの明白なケース " –
銃は、足の人々。 :-) –
あなたはCREATEVIEWのミックスインとクラスベースのビューを使用している場合は、例えば、スーパークラスのform_validへの呼び出しを「試す」ことになるでしょうが:
from django.db import IntegrityError
...
class KumquatCreateView(CreateView):
model = Kumquat
form_class = forms.KumquatForm
...
def form_valid(self, form):
...
try:
return super(KumquatCreateView, self).form_valid(form)
except IntegrityError:
return HttpResponse("ERROR: Kumquat already exists!")
あなたは、テンプレートを使用することができ、render_to_response
もちろん、より良い出力にするために。
私はそれをModelFormで検証します。たとえば:
class Manufacturer(models.Model):
name = models.CharField(default='', max_length=40, unique=True)
とのModelForm:
class ManufacturerForm(forms.ModelForm):
def clean(self):
cleaned_data = super(ManufacturerForm, self).clean()
name = cleaned_data.get('name')
if Manufacturer.objects.filter(name=name).exists():
raise forms.ValidationError('Category already exists')
class Meta:
model = Manufacturer
あなたはユニークな名前を提出する。この場合
あなたはモデルを得ました。 IntegrityErrorの前に検証エラーが発生します。 'Category already exists'というメッセージがテンプレートにフォームに表示されます
- 1. MySQLiを使用した結合でエラーが表示される
- 2. Djangoを使用してテンプレートにYouTube動画を表示する
- 3. テンプレートタグを使用してロードされたテンプレートのDjangoテスト
- 4. WebページでJSONを使用してフォーマットされたメッセージを表示する
- 5. PHPメール()エラーをキャッチし、合理的なユーザーエラーメッセージを表示
- 6. .htaccessを使用したエラーのキャッチ
- 7. Djangoテンプレートを使用したナビゲーションメニュー
- 8. Django管理用テンプレートをカスタマイズする
- 9. カスタマイズされたドロップダウンリストを表示
- 10. django-cmsテンプレートをプラグインとして使用
- 11. djangoテンプレートにタイムスタンプを表示
- 12. グラフAPIを使用してカスタマイズされたFacebookメッセージを送信して、友だちをウェブサイトに招待する
- 13. mysqldumpと参照整合性を使用して
- 14. Djangoテンプレートが正しく表示されない
- 15. JavaScriptを使用してメッセージを表示して非表示にするタイミングイベントを使用する方法
- 16. JodaTimeを使用してローカライズされた時間を表示
- 17. LoadControlを使用してキャッシュされたWebUserControlを表示する
- 18. ツールヒントのCSSをカスタマイズした後、2回表示されます
- 19. レールでスケジュールされたメッセージを表示
- 20. Django rest frameworkルータ - カスタマイズされたURLを追加して機能を表示する方法
- 21. django登録表示のカスタマイズ
- 22. SendMessageメソッドを介して送信されたすべてのメッセージを "キャッチ"
- 23. JMeterを使用したWebアプリケーションの並行性やトランザクション整合性のテスト
- 24. JavaScriptを使用してTextBoxの近くにメッセージを表示
- 25. JavaScriptを使用してメッセージを表示する
- 26. msgをPHPで使用してメッセージを表示
- 27. Drupal 7のカスタムページ表示テンプレートを使用してノードフィールドを表示する
- 28. 403カスタマイズされたエラー404の代わりにエラーが表示されました。
- 29. zendコールバックでカスタマイズされたメッセージを確認します
- 30. djangoテンプレートで増減された変数を使用する
「MySQLdb import IntegrityErrorから」というのはなぜこのトリックを行っていないのか分かりませんでした。コールスタックは、ライブラリがエラーを起こしているように見えましたが、何とかdjango.dbに移動しました。 Grr。 – Julian
[docs of v1.6](https://docs.djangoproject.com/en/1.6/ref/exceptions/#database-exceptions)で指摘されているように、[e .__ cause__]は[PEP 3134](http://legacy.python.org/dev/peps/pep-3134/)。 –
ありがとう、私は答えを更新しました。 – Joe