Django で非 HTML 形式のコンテンツを生成する方法。 _html/css_WEB-ITnose
場合によっては、Web ページ上のリンクまたはボタンをクリックして、HTML の代わりに画像、PDF ドキュメント、CSV ドキュメントなどを返す必要がある場合があります。 diango でこれを行うのは簡単です。 Django のビューは、http リクエストを受信し、Web レスポンスを返すために使用されます。通常、返されるコンテンツは HTML ですが、それだけではなく、上記の画像や PDF ファイルなどを返すこともできます。非 HTML コンテンツを返すための鍵は、HttpResponse クラス、特に mimetype パラメータにあります。このパラメータを別の値に設定すると、ブラウザ ビューに別の形式でコンテンツを返すように指示できます。たとえば、画像コンテンツを返したい場合は、画像を読み取って、HttpResponse で画像の MIME タイプを指定し、その画像コンテンツを別のパラメータとしてブラウザに応答するだけで、ブラウザは自動的かつ正確に応答することができます。画像の内容を表示します。
from django.http import HttpResponsedef my_image(request): image_data = open("/path/to/my/image.png", "rb").read() return HttpResponse(image_data, mimetype="image/png")
例:
CSV 形式でコンテンツを生成する
import csvfrom django.http import HttpResponse# Number of unruly passengers each year 1995 - 2005. In a real application# this would likely come from a database or some other back-end data store.UNRULY_PASSENGERS = [146,184,235,200,226,251,299,273,281,304,203]def unruly_passengers_csv(request): # Create the HttpResponse object with the appropriate CSV header. response = HttpResponse(mimetype='text/csv') response['Content-Disposition'] = 'attachment; filename=unruly.csv' # Create the CSV writer using the HttpResponse as the "file." writer = csv.writer(response) writer.writerow(['Year', 'Unruly Airline Passengers']) for (year, num) in zip(range(1995, 2006), UNRULY_PASSENGERS): writer.writerow([year, num]) return response
1. 返されるドキュメントが CSV であることをブラウザーに伝えるために、HttpResponse の mimetype は「text/csv」として指定されます。ファイル。
2.HttpResponse は、別のパラメーター Content-Disposition を設定します。ここで、添付ファイルは、コンテンツを表示する代わりに、返されたドキュメントを保存するようにブラウザーに指示し、ファイル名は返されたドキュメントの名前を指定します。名前は任意に指定できます。
3. csv の Writer メソッドはパラメータとしてファイル タイプのオブジェクトを期待しており、HttpResponse インスタンスはファイルとして使用できるため、CSV モジュールの Writer メソッドのパラメータとして HttpResponse を直接使用できます。
4. Writer.writerow メソッドは、コンテンツ行をファイルに書き込む役割を果たします。
上記のメソッドは、非 HTML 形式のコンテンツを返すための一般的なパターンです。つまり、特定の MIME タイプの HttpResponse を作成し、それをパラメータとしてファイルを受け取るメソッドに渡し、特定の形式でドキュメントを生成します。そして応答を返します。
PDF 形式でコンテンツを生成する
from reportlab.pdfgen import canvasfrom django.http import HttpResponsedef hello_pdf(request): # Create the HttpResponse object with the appropriate PDF headers. response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename=hello.pdf' # Create the PDF object, using the response object as its "file." p = canvas.Canvas(response) # Draw things on the PDF. Here's where the PDF generation happens. # See the ReportLab documentation for the full list of functionality. p.drawString(100, 100, "Hello world.") # Close the PDF object cleanly, and we're done. p.showPage() p.save() return response
1. ここでは application/pdf MIME タイプを使用して、PDF ファイルが返されることをブラウザーに伝えます。 HTML の代わりに、それ以外の場合はブラウザー これは通常の HTML コンテンツとして扱われます。
2. Canvas.Canvas メソッドはパラメータとしてファイルのようなオブジェクトを期待し、HttpResponse をメソッドに渡します。
3. Canvas インスタンスのメソッドを使用して PDF ドキュメントを描画し、showPage() メソッドと save() メソッドを呼び出します (そうしないと、破損した PDF ドキュメントが生成されます)。
4. 最後に HttpResponse インスタンスを返します
より複雑な PDF ドキュメントを生成します。ここでは、cStringIO ライブラリを使用して PDF ファイルを一時的に保存します 他の可能な形式を確認します
本質的に、ファイルを書き込むことができる Python ライブラリはすべて組み合わせることができますDjango の HttpResponse を使用して、ZIP ファイル、動的画像、チャート、XLS ファイルなどの特定の形式でコンテンツを返します。
最後に、xls ファイルを返す例を見てみましょう
from cStringIO import StringIOfrom reportlab.pdfgen import canvasfrom django.http import HttpResponsedef hello_pdf(request): # Create the HttpResponse object with the appropriate PDF headers. response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename=hello.pdf' temp = StringIO() # Create the PDF object, using the StringIO object as its "file." p = canvas.Canvas(temp) # Draw things on the PDF. Here's where the PDF generation happens. # See the ReportLab documentation for the full list of functionality. p.drawString(100, 100, "Hello world.") # Close the PDF object cleanly. p.showPage() p.save() # Get the value of the StringIO buffer and write it to the response. response.write(temp.getvalue()) return response
さらに、特定の形式でコンテンツを正しく返すには、ここでのリクエストをフォームを通じて送信する必要があることに注意することが重要です。リクエストが Ajax を通じて開始された場合、返されたコンテンツはテキスト文字列として扱われ、返されることはできません。ブラウザによって特定のコンテンツとして解釈されます。
例:
from django.http import HttpResponseimport xlwtdef viewXls(request): response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=request.xls' book = xlwt.Workbook(encoding='utf8') sheet = book.add_sheet('untitled') for row, column, value in ((0,0,1),(0,1,2),(1,0,3),(1,1,4)) sheet.write(int(row),int(column),value) book.save(response) return response
場合によっては、フォーム内のすべてのコンテンツをキーと値のペアの文字列にシリアル化し、URL パラメーターを全体として渡す必要があり、値に含まれる特殊文字をエンコードする必要があります。たとえば、次のような形式があります。
$.ajax({ url:"{% url 'mycitsm.views.viewXls' %}", data:postData, type:"POST", success:function(result){ }, });//是不可以的,而要使用如下的表单提交才可以:var form = $("#xlsForm");form.attr({ action:"{% url 'mycitsm.views.returnXls' %}", method:"POST" });form.submit();
もちろん、フォーム全体を直接シリアル化するだけでなく、、

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









この記事では、HTML< Progress>について説明します。要素、その目的、スタイリング、および< meter>との違い要素。主な焦点は、< Progress>を使用することです。タスクの完了と< Meter> statiの場合

この記事では、HTML< Datalist>について説明します。オートコンプリートの提案を提供し、ユーザーエクスペリエンスの改善、エラーの削減によりフォームを強化する要素。

この記事では、html< meter>について説明します。要素は、範囲内でスカラーまたは分数値を表示するために使用され、Web開発におけるその一般的なアプリケーション。それは差別化< Meter> < Progress>およびex

記事では、HTML5クロスブラウザーの互換性を確保するためのベストプラクティスについて説明し、機能検出、プログレッシブエンハンスメント、およびテスト方法に焦点を当てています。

この記事では、html5< time>について説明します。セマンティックデート/時刻表現の要素。 人間の読み取り可能なテキストとともに、マシンの読みやすさ(ISO 8601形式)のDateTime属性の重要性を強調し、Accessibilitを増やします

この記事では、ブラウザのユーザー入力を直接検証するために、必要、パターン、MIN、MAX、および長さの制限などのHTML5フォーム検証属性を使用して説明します。

この記事では、モバイルデバイスのレスポンシブWebデザインに不可欠なViewportメタタグについて説明します。適切な使用により、最適なコンテンツのスケーリングとユーザーの相互作用が保証され、誤用が設計とアクセシビリティの問題につながる可能性があることを説明しています。

この記事では、< iframe>外部コンテンツをWebページ、その一般的な用途、セキュリティリスク、およびオブジェクトタグやAPIなどの代替案に埋め込む際のタグの目的。
