web-dev-qa-db-ja.com

Django URLS、ルートをアプリにマップする方法?

私はDjangoが初めてですが、PythonおよびJavaさまざまなフレームワークを使用したWebプログラミング。ナイスリトルDjangoアプリですが、www.mysite.com/myappではなくwww.mysite.comに一致させることはできません。

現在、アプリから切り離されていないurls.confでURLとビューを定義しています(気にしないでください)。

urlpatterns = patterns('myapp.views',
  (r'^myapp/$', 'index'),
  (r'^myapp/(?P<some_id>\d+)/global_stats/$', 'global_stats'),
  (r'^myapp/(?P<some_id>\d+)/player/(?P<player_id>\d+)/$', 'player_stats'),
)

これはすべて魅力のように機能します。誰かがwww.mysite.com/myappにアクセスすると、インデックスビューにアクセスして、httpが「正しい」デフォルトURLにリダイレクトされます。

したがって、(r '^ myapp/$'、 'index')と同じように、/ myappなしでパターンを追加するにはどうすればよいですか?つまり、www.mysite.comで十分です。

これは非常に基本的なものになると思います...私は次のような行を追加しようとしました:

(r'^$', 'index'),

しかし、これは私をループに投げます...

あなたがDjango

52
Hoof

これは奇妙に聞こえます。

あなたの最新の試みはうまくいくはずですが、私は通常何をしますか?

urlpatterns = patterns('',
    (r'^$', lambda r: HttpResponseRedirect('myapp/')),
    ...
)

これは、新しいアプリの追加を開始するときのスケーラビリティに優れています。

67
Guard

私はこの質問が2年前に尋ねられたことを知っていますが、同じ問題に直面し、解決策を見つけました。

プロジェクトでurls.py

urlpatterns = patterns('',
    url(r'^', include('my_app.urls')), #NOTE: without $
)

my_app.urls.py

urlpatterns = patterns('',
    url(r'^$', 'my_app.views.home', name='home'),
    url(r'^v1/$', 'my_app.views.v1', name='name_1'),
    url(r'^v2/$', 'my_app.views.v2', name='name_2'),
    url(r'^v3/$', 'my_app.views.v3', name='name_3'),
)
96
Kamal Alseisy

Django 2.0に対する答えが見つからなかったので、提供するつもりでした。ルートURLとして''を使用する必要があります。これは Django 2.0 docs

urlpatterns = [
    path('', main_views.homepage),
    path('help/', include('apps.help.urls')),
    path('credit/', include(extra_patterns)),
]
16
Amen

空の生の正規表現を置くだけです:r ''

ここでテストしたところ、完全に機能しました。

urlpatterns = patterns('',
    url(r'', include('homepage.urls')),
    url(r'^homepage/', include('homepage.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

お役に立てば幸いです!

5
Fabio Nolasco

答えが遅いことはわかっていますが、最近は狩りにかなりの割合を費やしました。これは私がCBVで試したものです..プロジェクトurls.pyで

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', include('app_name.urls', namespace='app_name')),
]

PS:名前空間を使用することが常に推奨されます。後で有利になります。

アプリでurls.py

urlpatterns = [
    url(r'^$', views.IndexPageView.as_view(), name='index'),
]
2
Vipin Mohan

また、ドメインのルートがサブアプリのビューを直接指すようにしたかったのです。

最初に、次のコマンドでサブアプリを作成しました。

python3 manage.py startapp main offer_Finder/main

あなたの場合は次のようになります:

python3 manage.py startapp myApp project/somedirectory/myApp

ディレクトリが存在することを確認してください:mkdir -p project/somedirectory/myApp

これは私のプロジェクト構造です: プロジェクト構造

私の場合、これらのディレクトリがあります。

offer_Finder_project/offer_Finder/main        # sub app  
offer_Finder_project/offer_Finder/            # main source directory  

offer_Finder_project/offer_Finder/urls.py私はこのコードを持っています:

from Django.contrib import admin
from Django.urls import path, include


urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('offer_Finder.main.urls')),
]

offer_Finder_project/offer_Finder/main/urls.py私はこのコードを持っています:

from Django.urls import path
from . import views

urlpatterns = [
    path('', views.index),
]

そしてその offer_Finder_project/offer_Finder/main/views.pyファイルには、単にテストコードが含まれています。

from Django.http import HttpResponse

def index(request):
    return HttpResponse("TEST app index")

これにより、ルートドメインへのリクエストはサブアプリに転送されます。これが誰かの助けになることを願っています。このコードは、Django 2.1.4でテストされました。

2
John Behm