Django URLS,如何将root映射到app?

问题描述 投票:47回答:6

我是django的新手,但在使用不同框架的Python和java web编程方面经验丰富。我已经把自己变成了一个不错的小django应用程序,但我似乎无法使它与www.mysite.com匹配而不是www.mysite.com/myapp。

我在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重定向到我的“正确”默认网址。

那么,我怎样才能添加一个与(r'^ myapp / $','index')相同但不使用/ myapp的模式 - 也就是说,www.mysite.com就足够了?

我认为这将是非常基本的东西......我尝试添加如下行:

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

然而这让我陷入了困境......

希望你在那里的django大师可以为我澄清这个!

django django-urls
6个回答
63
投票

这听起来很奇怪。

你的最新尝试应该有效,但我通常做的是 - 放

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

当您开始添加新应用时,这会更好地扩展。


96
投票

我知道这个问题是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'),
)

14
投票

因为我没有看到django 2.0的任何答案我以为我会提供一个。你必须使用''作为根网址。以下是django 2.0 docs的一个例子

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

5
投票

只需放一个空的原始正则表达式:r''

我在这里测试过它完美无缺。

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

希望它有所帮助!


2
投票

我知道答案已经很晚了,但我最近有相当多的狩猎。这是我在项目urls.py中尝试使用CBV ..

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

PS:始终建议使用命名空间。以后会给你一个很好的优势。

在App urls.py中

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

2
投票

我还想让我的域的根直接指向子应用程序的视图。

起初我用这个命令创建了子应用程序:

python3 manage.py startapp main offer_finder/main

在你的情况下,它将是:

python3 manage.py startapp myApp project/somedirectory/myApp

确保该目录存在:mkdir -p project/somedirectory/myApp

这是我的项目结构:Project structure

在我的情况下,我有这些目录:

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进行了测试。

© www.soinside.com 2019 - 2024. All rights reserved.