programing

Django URLS, 루트를 앱에 매핑하는 방법은 무엇입니까?

yoursource 2021. 1. 16. 10:54
반응형

Django URLS, 루트를 앱에 매핑하는 방법은 무엇입니까?


저는 django를 처음 접했지만 다른 프레임 워크를 사용하는 Python 및 Java 웹 프로그래밍 경험이 있습니다. 나는 나 자신을 멋진 작은 장고 앱으로 만들었지 만, 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'),

그러나 이것은 나를 루프에 던졌습니다 ...

장고 전문가가 나를 위해 이것을 명확히 할 수 있기를 바랍니다!


이상하게 들립니다.

귀하의 최근 시도는 작동하지만 일반적으로 수행하는 작업은

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 문서 의 예입니다.

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)),
)

도움이 되었기를 바랍니다.


대답이 늦었다는 것을 알고 있지만 최근에 사냥에 공평하게 몫을했습니다. 이것은 내가 프로젝트 urls.py에서 CBV ..로 시도한 것입니다.

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

추신 : 항상 네임 스페이스를 사용하는 것이 좋습니다. 나중에 좋은 이점을 제공합니다.

앱 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에서 테스트되었습니다.

참조 URL : https://stackoverflow.com/questions/7580220/django-urls-how-to-map-root-to-app

반응형