0

モジュール変数は、プロセスが存続する限り存続し、プロセスが再起動するまでリセットされないようです。

これが私のコードで、現在の動作とは別の動作を期待しています。

ブレッドクラムやタイトル、ファイルfancy/utils.pyなどのさまざまなSEO機能を担当するモジュールがあります。

class Seo:
    title = ['project name']

後で私のビューで、Seo.titleにアイテムを追加できます(たとえば、news.views):

from fancy.utils import Seo

def index(request, news_id):
    title.append('some specific title')
    ...

重要なのは、変数Seo.titleは実際にはすべてのリクエストでリセットされるわけではないので、それ自体にアイテムを追加し続け、私には非常に奇妙に見えます(PHPから来たので)。

最終的に、同じページでF5を押すと、タイトルは常に巨大で長くなります。

何が起こっているのですか、どうすればよいですか?

ありがとう

4

2 に答える 2

3

あなたのコメントから、あなたはDjangoの実行モデルを完全に誤解しているようです。

コード内のどこからでもアクセスできるリクエストに対してローカルなデータを持つことはできません。特定のリクエストに関連付けられたデータが必要な場合は、そのリクエストを実行しているコードがデータを取得できる場所にデータを保存する必要があります。おそらくセッション内、またはリクエストオブジェクト自体に追加された一時的な辞書に保存する必要があります。グローバルに保存するものはすべてグローバルになります。同じプロセス内で実行されているすべてのリクエストに表示されます。

于 2012-10-08T13:35:24.527 に答える
1

あなたtitleは属性ではなくクラス属性instanceです。複数のリクエスト間で設定を保持したい場合は、セッションでその設定への参照を保持できます。

例えば

class Seo(object):
    def __init__(self):
        self.title = ['project name']

...

def index(request, news_id):
    seo = request.session.get('seo', Seo())
    seo.title.append('some specific title')
于 2012-10-08T12:08:14.223 に答える