2011-10-28 4 views
3

URLルーティングシステムではなく、Djangoモデルとテンプレートの使い方を教えてください。私はurls.pyシステムをPHPのようなものに置き換えたいと思っています。URLのどこにコードが実行されているのかが正確に分かります。レールのようなもっと自動化されたものでも、URLには常にアプリケーション名、モデル名、ビュー名などの同じコンポーネントが含まれています。Djangoの代替URLルータ

私はdjango philosophy statementから「Pythonの関数名にURLを結びつけることは悪くて醜いこと」という行には同意しません。かなりのURLだけではそれほど重要ではありません.IMVHOは、複数のurls.pyファイルと数十の正規表現を使って、特定のURLの後ろでどのコードが実行されているかを知ることができます。それは個人的な選択ですよね? Djangoは一般的にはかなりモジュール化されており、他のコンポーネントの主要なコンポーネントを交換することができます。だから、リクエストURLを取る部分をどのように交換して、どのビューを実行するかを決めるにはどうしたらいいですか?

そこにdjangoの代替URLルータがありますか?

答えて

4

urls.pyには、すべてが一致する行が1行あり、ハンドラ/ディスパッチャをビューとして書き込むだけです。そのハンドラは、URLの部分に基づいて、あなたが望むものは何でも行います....

2

DjangoのURLルーティングシステムを正常に交換している人は誰も聞いたことがありません。確かにそれのためのフックがありません - core.handlers.base.BaseHandler.get_responseurlresolvers.RegexURLResolverを直接呼び出します。おそらく、スタックの一番下にミドルウェアを追加して独自のURL解決システムに送り、レスポンスを返すことで、Djangoシステムをバイパスすることができますが、ちょっとしたクルージングです。

もしあなたがRailsのようなものを後にしているなら、他のフレームワーク - Pyramidの1つを試してみるとよいでしょう。例えば、Railsによく似たルートのシステムを使います。 PyramidはDjangoよりもはるかにプラガブルなので、DjangoをベースにしたJinja2テンプレートシステムをプラグインできるはずです。しかし、DjangoのORMを別々に使用する方法はないので、SQLAlchemyを使用する必要があります(これは大した違いはありません)。