2012-01-16 18 views
0

APIが明確でないため、私はちょうど2時間をいくつかのdjangoコードのデバッグに費やしました。 https://docs.djangoproject.com/en/1.3/topics/http/shortcuts/#renderDjango/Python API - メソッドが受け取るオブジェクトのクラスを知るにはどうすればよいですか?

レンダリング(リクエスト、テンプレート[辞書] [、context_instance] [、 CONTENT_TYPE] [ステータス] [、CURRENT_APP])

:ここではDjangoのドキュメントは、 "レンダリング" の方法について述べているものです

与えられたテンプレートと指定されたコンテキスト辞書を結合し、そのレンダリングされたテキストを持つHttpResponseオブジェクトを として返します。

render()は、RequestContextを強制的に使用する context_instance引数を指定してrender_to_response()を呼び出すのと同じです。

ここで、renderメソッドが期待する第2引数がテンプレートであることを見て、私はそれにTemplateオブジェクトを渡しました。メソッドが本当に望むのは、文字列として与えられたテンプレートの名前です。私はこれをどのように知っていますか?そして、 "状態"とは何か - 整数ですか?文字列? Statusオブジェクト?リスト?参照する明確な文書はどこで入手できますか?

また、私がプログラミングしている間、これらの種類のものを検出できるIDEを見つけることが大好きです。NetbeansとJavaで作業したとき、この種のエラーは、私がコードの次の行を入力し始める前に。

+4

ドキュメントには*使用するテンプレートのフルネームまたはテンプレート名のシーケンス*が記載されていますが、その下の数行にはテンプレート**ファイル名**の使用例が示されています。それにもかかわらず、あなたの懸念事項は、動的言語の主な問題*の1つです。 – miku

答えて

2

私はDaniel Rosemanの答えに同意しますが、私はあなたの混乱に同情しています。インターフェイスとそのパラメータをよりよく説明できたと思います。

Djangoのインターフェイスは、動的なタイピングのアイデアに非常に拘束されています。つまり、アヒルのように歩いている場合は、アヒルのように泳いでいたら、それをアヒルと呼んでください。 Djangoのインターフェースでは、文字列型を渡す必要はありません。文字列のように動作するエンティティを渡す必要があります。

リンク先のドキュメントで、各パラメータの具体的な語句をrender()に慎重に見てください。 リクエストは「要求オブジェクト」です。テンプレートは、「の完全名 ...またはの名前です。 辞書は、 "辞書の値..."です。 ステータスは "応答のステータスコードです。デフォルトは" [整数]です。

私は、インターフェイスが期待している、または戻っているダイナミックタイプを示唆する単語に重点を置いています。 オブジェクトは、一連のメソッドを持つオブジェクト型を意味します。 名前は文字列を意味します。 200の例は、ステータスコードが整数であることを示しています。

私はDjangoのドキュメントが、期待している、または返す動的なタイプのボキャブラリをより明確にしていると、より明確になると思います。 "要求は、要求オブジェクトインタフェースを実装するオブジェクトです"と言って、オブジェクトがそのインタフェースとして適格にするためにどのようなメソッドを実装する必要があるかを正確に定義します。ドキュメントは、ステータスのように暗黙的ではなく明示的に指定することもできます。この場合、文字通り「整数」と言うことができます。

ただし、Djangoのインターフェイスは、ダックタイピングを受け入れるために「pythonic」に設計されています。ダニエルはそうです。「PythonをJavaのようにプログラミングすることを主張すれば、それは難しいでしょう。これはDjango's Design PhilosophiesPython's PEP 20 -- The Zen of Pythonを読み込むのに良い時期かもしれません。どちらも、「強力な型付けのおかげでコンパイル時の文法チェックを行う」ことを目標として述べていないことに注意してください。トト、私はもうJavaにはいないと思う。

+0

ありがとうございます。私はもはやjavaで作業していないことを嬉しく思っていますが、この経験は私が人々がjavaを選択し続ける理由を実感しました。 – Deonomo

8

これはもっとうまく説明できません。コメントでmikuが指摘するように、ドキュメントには「使用するテンプレートのフルネーム」と明記されています。さらに、すぐ下の例は文字列の使用を示しています。

PythonはJavaでも、静的に型指定された言語でもありません。ドキュメントには文字列が必要であるとは言わない。なぜなら、名前を含む文字列のようなものが必要だからである。

また、コードにすぐにアクセスできることを忘れないでください。機能を理解していないのですか?さて、https://code.djangoproject.com/browser/django/trunk/django/shortcuts/__init__.pyを見てください。

さらに、Pythonでは、単にJavaを使用しないというオプションがあります。シェルを見てください。 from django.shortcuts import renderを実行し、次にhelp(render)を実行して、何が表示されているのかを確認します。

PythonをJavaのようにプログラミングしなければならない場合は、難しいでしょう。 PythonのようにPythonをプログラムすると、はるかに簡単になります。

+0

javaでも、私はソースコードにアクセスできます。私はむしろ私がそれらを使用するはずであることを見つけるために使用するすべてのライブラリのソースコードを掘り起こすつもりはないでしょう。私はシェルオプションが好きですが、それは間違いなく私がjavaから来ることに慣れていないものです。 – Deonomo

関連する問題