私は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
これは奇妙に聞こえます。
あなたの最新の試みはうまくいくはずですが、私は通常何をしますか?
urlpatterns = patterns('',
(r'^$', lambda r: HttpResponseRedirect('myapp/')),
...
)
これは、新しいアプリの追加を開始するときのスケーラビリティに優れています。
私はこの質問が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'),
)
Django 2.0に対する答えが見つからなかったので、提供するつもりでした。ルートURLとして''
を使用する必要があります。これは Django 2.0 docs
urlpatterns = [
path('', main_views.homepage),
path('help/', include('apps.help.urls')),
path('credit/', include(extra_patterns)),
]
空の生の正規表現を置くだけです:r ''
ここでテストしたところ、完全に機能しました。
urlpatterns = patterns('',
url(r'', include('homepage.urls')),
url(r'^homepage/', include('homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)
お役に立てば幸いです!
答えが遅いことはわかっていますが、最近は狩りにかなりの割合を費やしました。これは私が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'),
]
また、ドメインのルートがサブアプリのビューを直接指すようにしたかったのです。
最初に、次のコマンドでサブアプリを作成しました。
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でテストされました。