Подтвердить что ты не робот

URL-адреса Django, как сопоставить root с приложением?

Я новичок в django, но опыт в Python и Java-программировании с различными фреймворками. Я сделал для себя приятное приложение для django, но я не могу заставить его соответствовать www.mysite.com, а не www.mysite.com/myapp.

Я определил URL-адреса и представления в моем urls.conf, который в настоящее время не отключен от приложения (не обращайте на это внимание).

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

однако это бросает меня в цикл...

Надеюсь, что гуру-джанго могут объяснить это для меня!

4b9b3361

Ответ 1

Это звучит странно.

Ваша последняя попытка должна работать, но что я обычно делаю - поставьте

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

Это масштабируется лучше, когда вы начинаете добавлять новые приложения.

Ответ 2

Я знаю, что этот вопрос задавался 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'),
)

Ответ 3

Поскольку я не видел ответа для django 2.0, я думал, что предоставлю один. Вы должны использовать '' в качестве корневого URL. Вот пример из документации Django 2.0

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

Ответ 4

Просто введите пустое регулярное выражение: r ''

Я тестировал здесь, и он работал отлично.

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

Надеюсь, что это поможет!

Ответ 5

Я знаю, что ответ задерживается, но в последнее время у меня была моя доля охоты. Это то, что я пытался с CBV.. в Project 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'),
]

Ответ 6

Я также хотел получить корень своего домена, чтобы он напрямую указывал на представление вспомогательного приложения.

Сначала я создал подпрограмму с помощью этой команды:

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

И файл views.py просто содержит тестовый код.

from django.http import HttpResponse

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

Таким образом, ваши запросы к корневому домену направляются в ваше вспомогательное приложение. Надеюсь, это кому-нибудь поможет. Этот код был протестирован с Django 2.1.4.