0

単純に見えるかもしれないことをしようとしていますが、理解できません。いつものように、django はその複雑さに驚かされます...

私のビューはモデルのインスタンスを生成し、コンテキスト内でテンプレートに「渡します」。そのテンプレートで、ユーザーはフォームに入力して送信します。そして、これが次に起こるべきことです: ページがロードされたときにコンテキストにあったオブジェクトは、少し変更され、コンテキストでもう一度 (同じテンプレートに) 送信されます。ただし、ページが読み込まれたときにコンテキストにあったオブジェクトのインスタンスを取得できません。することは可能ですか?ひょっとして隠し入力?または、派手なジャンゴ機能を使用しますか?回避策も含め、他のアイデアも歓迎します (これは実際には専門的なプロジェクトではありません。私は楽しみと経験のためにやっています)。

この質問がばかげている場合は申し訳ありませんが、私は django を初めて使用し、私の脳はまだすべてを理解するのに苦労しています。ご協力いただきありがとうございます!

4

3 に答える 3

1

モデル (または任意の Python オブジェクト) を別のページに直接渡すことはできません。回避策 (セッション、シリアライザー) がありますが、ほとんどの場合、これらは必要ありません。

あなたの場合、実際の Python オブジェクトを渡す必要はなく、推奨されません。Django には、フォーム処理のための多くの機能とオプションが用意されています。モデルを直接編集できるフォームを簡単に作成できる優れた機能であるModelFormsに注目してください。

于 2013-08-13T16:27:00.280 に答える
0

これはジャンゴとは関係ありません。それがウェブのしくみです。HTTP はステートレスです。ページを生成すると、そのタスクは完了です。モデル インスタンスが破棄されます。

ユーザーがフォームを送信するか、その他の方法で変更を送信すると、新しい要求と新しいコンテキストで新しい接続が開始されます。この時点で、変更するオブジェクトを再インスタンス化する必要があります。アプリケーションとモデル自体によって異なります。オブジェクトに unique_id がある場合はそれを渡し、それを照会する実際のコンテキストでそれを取得できます。

于 2013-08-13T16:28:31.510 に答える
0

あなたが参照しているコンテキストは、django がテンプレートをレンダリングするために使用するものです。コンテキスト内のオブジェクトは、HTML 応答/要求では渡されません。指定した HTML テンプレートのコンテンツを生成するためにのみ使用され、静的データとして http 応答に渡されます。

あなたがやろうとしていると私が信じていることを行うには、通常、アクセスしようとしているモデル インスタンスの ID を、ロードしているページの URL に渡します。そのため、モデル インスタンス コンテキストを渡したページのテンプレートで、次のようになります。

<a href="{% url 'name_of_next_url' model_instance.id %}">Link to model-specific page</a>

アクセスしようとしているインスタンス ページの URL は次のようになります。

url(r'^next_url/(?P<model_instance_id>\d+)/$', 'views.next_url_view', name='name_of_next_url')

景色:

def next_url_view(model_instance_id):
    model = Model.objects.get(pk=model_instance_id)
    ...

これで、後続のビューでモデル インスタンスにアクセスできるようになりました。

他の人が述べたように、このようなほとんどのことを処理できるジェネリック/クラスベースのビューが既にありますが、最初に背景を知ることは良いことです.

于 2013-08-13T16:37:03.023 に答える