Je suis assez nouveau pour Django, mais je connais bien la programmation Web en Python et en Java avec différents frameworks . .com/myapp.
J'ai défini les URL et les vues dans mon fichier urls.conf qui n'est actuellement pas découplé de l'application (cela ne vous dérange pas).
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'),
)
Tout cela fonctionne comme un charme. Si quelqu'un accède à www.monsite.com/monapp, il appuiera sur ma vue d'index, ce qui provoquera une redirection HTTP vers l'URL "correcte" par défaut.
Alors, comment puis-je ajouter un motif qui fera la même chose que (r '^ myapp/$', 'index') mais sans le/myapp - c'est-à-dire que www.monsite.com devrait suffire?
Je penserais que ce serait très basique ... J'ai essayé d'ajouter une ligne comme celle-ci:
(r'^$', 'index'),
mais cela me met dans une boucle ...
J'espère que les gourous de Django pourront clarifier cela pour moi!
Cela semble étrange.
Votre dernière tentative devrait marcher, mais ce que je fais normalement - mettre
urlpatterns = patterns('',
(r'^$', lambda r: HttpResponseRedirect('myapp/')),
...
)
Cela évolue mieux lorsque vous commencez à ajouter de nouvelles applications.
Comme je n’ai pas trouvé de réponse pour Django 2.0, j’ai pensé en fournir une. vous devez utiliser ''
en tant qu'URL racine. Voici un exemple tiré de Django 2.0 docs
urlpatterns = [
path('', main_views.homepage),
path('help/', include('apps.help.urls')),
path('credit/', include(extra_patterns)),
]
Il suffit de mettre une expression régulière brute vide: r ''
J'ai testé ici et cela a fonctionné parfaitement.
urlpatterns = patterns('',
url(r'', include('homepage.urls')),
url(r'^homepage/', include('homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)
J'espère que ça aide!
Je sais que la réponse est tardive, mais j'ai récemment eu ma part de chasse. C’est ce que j’ai essayé avec CBV .. Dans le projet urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', include('app_name.urls', namespace='app_name')),
]
PS: Il est toujours recommandé d'utiliser un espace de noms. Donne un bon avantage plus tard.
Dans l'application urls.py
urlpatterns = [
url(r'^$', views.IndexPageView.as_view(), name='index'),
]
Je souhaitais également que la racine de mon domaine pointe directement sur une vue d'une sous-application.
Au début, j'ai créé l'application secondaire avec cette commande:
python3 manage.py startapp main offer_Finder/main
Dans votre cas ce serait:
python3 manage.py startapp myApp project/somedirectory/myApp
assurez-vous que le répertoire existe: mkdir -p project/somedirectory/myApp
Voici la structure de mon projet: Structure du projet
Dans mon cas, j'ai ces répertoires:
offer_Finder_project/offer_Finder/main # sub app
offer_Finder_project/offer_Finder/ # main source directory
dans offer_Finder_project/offer_Finder/urls.py
j'ai ce code:
from Django.contrib import admin
from Django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('offer_Finder.main.urls')),
]
Et dans offer_Finder_project/offer_Finder/main/urls.py
j'ai ce code:
from Django.urls import path
from . import views
urlpatterns = [
path('', views.index),
]
Et le fichier views.py
contient simplement du code de test.
from Django.http import HttpResponse
def index(request):
return HttpResponse("TEST app index")
De cette façon, vos requêtes sur votre domaine racine sont dirigées vers votre sous-application . J'espère que cela aidera quelqu'un . Ce code a été testé avec Django 2.1.4.