0

mysite フォルダーに保存されているファイルを表示する必要があります。1 つは views.py という名前で、もう 1 つは request_view.py という名前です。urls.py では、views.py には「answer」メソッドを、request_view.py には「display_meta」メソッドを使用しました。

(django バージョン: 1.5 および python バージョン: 2.7.3)

これは URL パターンです。

url(r'^twitter/$', answer), url(r'request/$', display_meta)

http://127.0.0.1:8000/request/ を呼び出すと、最初のビュー (つまり、/twitter/) も呼び出されます!

助けはありますか?

もう一つ。私の view.py には、制限のないコード (つまり、メソッドにもクラスにも存在しないコード) があります。これが問題の原因ですか?

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
keyword = input('enter the keyword you want to search for?')
stream.filter(track = [keyword])

このコードとは別に、すべてのコードはクラスまたはメソッドのいずれかにあります。

私が気づいたことの 1 つは、最初に view.py のコードが実行され、次に display_meta が実行されることです。

前もって感謝します。

解決した

問題は、私が使用していたインポート機能にありました。私のコードはビューの 1 つで無制限だったので、選択した URL に関係なく、インポート関数は常にそれをインポートします。

提案

この例で言及されている命名法を常に使用してください。多くの本では、ビューをインポートするように提案されていますが、私のように無制限のコードを使用すると、エラーが発生する可能性があります。

4

3 に答える 3

1

/twitter/ ビューが呼び出される理由は正確にはわかりませんが、次の 2 つの点を変更する必要があります。

  1. この例 [1] でわかるように、url() の 2 番目のパラメーターとして文字列を使用する必要があります。「myapp.views.my_method」命名法を使用できます。
  2. URL の開始を示す ^ でリクエスト URL を開始するのを忘れました。

無制限のコードについては、それが問題の原因であるかどうかはわかりません。しかし、なぜそのコードを無制限にするのかわかりません。そのコードがいつ実行されるかはわかりません。そのファイルでビューを初めて呼び出して、Django がファイルをロードしたときだと思います (推測ですが、正確にはわかりません)。それを行うための良い方法になります。そのコードをいつ実行するかを考え、それをメソッドに入れて呼び出します。

[1] https://docs.djangoproject.com/en/1.5/topics/http/urls/#example

于 2013-03-06T16:38:15.683 に答える
0

ビューをPythonパッケージに整理すると、この問題を解決できる可能性があります。だからあなたがこのような構造を持っているなら...

# views.py
def SomeView(request):
    return HttpResponse('SomeView')

# another_view.py
def AnotherView(request):
    return HttpResponse('AnotherView')

これらの個別のビューファイルをビューパッケージに再編成できます。あれは...

# views
    # __init__.py
    from views import SomeView
    from another_view import AnotherView

    # views.py
    def SomeView(request):
        return HttpResponse('SomeView')

    # another_view.py
    def AnotherView(request):
        return HttpResponse('AnotherView')

そして今、すべてがdjango標準の方法で呼び出すことができます:

url(r'^url-to-some-view/$', 'views.SomeView'),
url(r'^url-to-another-view/$', 'views.AnotherView'),

更新しました:

'pythonパッケージ'を作成するには...

  1. viewsファイルと同じレベルでディレクトリを作成しview.pyます[ mkdir views]
  2. __init.py__ディレクトリ内にファイルを作成しますviews#これがディレクトリを「pythonパッケージ」にするものです
  3. ディレクトリに移動views.pyviewsます。
  4. ディレクトリに移動request_view.pyしますviews
  5. __init__.py必要なインポートステートメントを使用してファイルを編集します。この場合:

    from views import answer
    from request_view import display_meta
    

これは、ファイルをディレクトリに置き換えることです。すべてをファイルにインポートすることにより__init__.py、このディレクトリは、別のモジュールではなく、コードにとって大きなファイルのように見えます。

于 2013-03-06T15:06:29.197 に答える
0

こんにちはヘマントなぜあなたが書いたのか疑問に思っていますrequest_view.py.

ジャンゴのドキュメントを参照してください。

あなたができることはです。

views.py好きなように2つの関数を作成する

def answer(request):

   do some stuffs.

   render_to_response(template.html)

同じページに別の書き込み

def display_meta(request):

   # do your studd
   render_to_response(some.html)

2 つ別々に作成する必要はありませんVIEWS.PY

このコードが何をするのかわかりません

l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)
keyword = input('enter the keyword you want to search for?')
stream.filter(track = [keyword])

ただし、関数内で使用したい場合StdOutListener は、ビューで呼び出すことができます

お気に入り

def display_meta(request):
   stobject  = StdOutListener()  # use parameters if you have here 
   # do your studd
   render_to_response(some.html)
于 2013-03-06T07:44:54.753 に答える