2

2 つのアプリを分離しようとしています。

  1. 場所 - 場所 (町、国、場所など) に関する詳細を含むアプリ
  2. ディレクトリ - 興味のある場所 (ショップ、鉄道駅、パブなど) の詳細を含むアプリ - すべて分類されています。

との両方locations.Locationdirectory.Item緯度/経度座標が含まれており、特定の緯度/経度座標から一定の距離内にあるアイテムを見つけることができます。

次の URL 構造を使用したいと思います。

/locations/<location_slug>/directory/<category_slug>/

しかし、ディレクトリ アプリを位置情報アプリに依存させたくありません。

ディレクトリ アプリでこのようなビューを使用するために、この URL を変換するにはどうすればよいですか?

items_near(lat, lng, distance, category):

回避策は、これを翻訳する新しいビューをどこかに作成することですが、どこに配置すればよいでしょうか? それがディレクトリ アプリに入る場合は、それを位置情報アプリと組み合わせました。その逆も同様です。

この回避策のコードをプロジェクトの URL ファイル内に配置することをお勧めしますか? したがって、両方のアプリを避けますか? このようにすることに問題はありますか?

4

3 に答える 3

2

urlpattern が機能するには、呼び出されたビュー関数が場所とディレクトリの両方を認識している必要があります。簡単な答えは、このビュー関数を好きな場所に配置できるということです。これは単なる python 関数です。ただし、ディレクトリ アプリや位置情報アプリ以外にも、理にかなっている論理的な場所がいくつかあるかもしれません。

まず、最上位の u​​rls.py にはそのビュー コードを入れません。そのファイルは URLconf 関連のコードを対象としているためです。

ビューを配置する場所のいくつかのオプション:

  1. 特定のアプリの外部にあるファイルに新しいビュー関数を作成します。<project_root>/views.py1つの可能性です。このビューitem_near(..)がディレクトリ アプリからビューを呼び出すことに問題はありません。

    # in myproject/urls.py
    
    urlpatterns = (
       ...
       (r'/locations/(?P<location_slug>[\w\-]+)/directory/(?P<category_slug>[\w\-]+)/', 
        'myproject.views.items_near_from_slug')
    )
    
    # in myproject/views.py
    
    from directory.views import items_near
    
    def items_near_from_slug(request, location_slug, category_slug):
      location = get_object_or_404(Location, slug=location_slug)
    
      distance = 2 # not sure where this comes from
    
      # And then just invoke the view from your Directory app
      return items_near(request, location.lat, location.lng, distance, category_slug)
    
  2. 新しいアプリを作成し、そこにコードを配置します<my_new_app>/views.py。Django アプリに models.py、urls.py などを含める必要はあり__init__.pyません。Django にアプリを適切にロードさせたい場合 (たとえば、Django に templatetags を自動的に見つけさせたい場合)を含めるようにしてください。またはアプリ固有のテンプレート)。

個人的には、プロジェクトが比較的単純で、<project_root>/views.pyすべてのビューでごちゃごちゃになる危険がない場合にのみ、オプション 1 を使用します。特に場所とディレクトリの両方を認識する必要がある他のコードがあると予想される場合は、オプション 2 を使用します。オプション 2 を使用すると、関連する urlpatterns を独自のアプリ固有の urls.py で収集することもできます。

于 2010-01-05T02:37:45.240 に答える
0

アプリをどれだけ「再利用可能」にするかに関係なく、必然的にサイト固有のコードが必要になります。

再利用可能で分離されたアプリのビューを使用する「サイト固有の」アプリケーションを作成することは論理的だと思います。

于 2010-01-05T06:30:08.313 に答える