0

アップグレード後に Django でクラスベースのビューに変更しようとしていますが、これに関して 2 つの質問があります。これは私のコードで、簡略化されています:

# urls.py

urlpatterns += patterns('project.app.views',
    ('^$', 'index'), # Old style
    url(r'^test/$', SearchView.as_view()), # New style
)


# views.py

class SearchView(TemplateView):
    template_name = 'search.html'

    def get_context_data(self, **kwargs):
        messages.success(request, 'test')
        return {'search_string': 'Test'}

これを実行すると、最初にエラーが発生しますname 'SearchView' is not defined。誰かが理由を知っていますか?

私が追加したものをスキップしようとしていますが、from project.app.views import SearchViewこれは醜く、私が望んでいる方法ではありませんが、残りを機能させることができるかどうかを確認しようとしています. それから私global name 'request' is not definedmessages. これは理にかなっていますが、ここでリクエストオブジェクトを取得するにはどうすればよいですか?

だから私は知りたい: ビューを意図したとおりに動作させるにはどうすればよいですか? でメッセージを使用する方法はget_context_data()?

4

2 に答える 2

1

にインポートしname 'SearchView' is not definedていないため、表示されていSearchViewますurls.py。これが見苦しいと思われる場合は、代わりに古いスタイルを使用してビューを参照することができsearch = SearchView.as_view()ます。メッセージを追加するために、リクエストにアクセスできます。更新されたソースの例を以下に示します。views.pysearchself.request

# views.py
class SearchView(TemplateView):
    template_name = 'search.html'

    def get_context_data(self, **kwargs):
        messages.success(self.request, 'test')
        return {'search_string': 'Test'}

search = SearchView.as_view()

# urls.py
urlpatterns += patterns('project.app.views',
    url('^$', 'index'), # Old style
    url(r'^test/$', 'search'), # New style
)
于 2012-04-19T13:45:42.857 に答える
0

一度に 1 つの質問をしてください (StackOverflow ガイドライン)。

ともかく:

  • これは、クラスベースのビューが機能することを意図した方法です。自動インポートの魔法はありません。クラスをインポートして、その as_view() メソッドを使用するだけです。
  • を介して、ビュー クラスのリクエスト オブジェクトにアクセスできますself.request
于 2012-04-19T13:43:25.523 に答える