我是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大师澄清一下这个!
答案 0 :(得分:94)
我知道这个问题是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'),
)
答案 1 :(得分:61)
这听起来很奇怪。
你的最新尝试应该有效,但我通常做的是 - 把
urlpatterns = patterns('',
(r'^$', lambda r: HttpResponseRedirect('myapp/')),
...
)
当您开始添加新应用时,这会更好地扩展。
答案 2 :(得分:13)
由于我没有看到django 2.0的任何答案,我以为我会提供一个。你必须使用''
作为根网址。以下是django 2.0 docs
urlpatterns = [
path('', main_views.homepage),
path('help/', include('apps.help.urls')),
path('credit/', include(extra_patterns)),
]
答案 3 :(得分:4)
只需输入一个空的原始正则表达式:r''
我在这里测试过它完美无缺。
urlpatterns = patterns('',
url(r'', include('homepage.urls')),
url(r'^homepage/', include('homepage.urls')),
url(r'^admin/', include(admin.site.urls)),
)
希望有所帮助!
答案 4 :(得分:1)
我知道答案已经很晚了,但我最近有相当多的狩猎。这是我用CBV试过的.. 在项目urls.py
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'),
]
答案 5 :(得分:1)
我还希望拥有域的根目录以直接指向子应用程序的视图。
首先,我使用以下命令创建了子应用程序:
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上进行了测试。
答案 6 :(得分:1)
这里的老问题...(和我自己一样多:o)
但仍然值得分享Django 3.x的更新:
在项目urls.py中只需添加:
urlpatterns = [
path('', include('myapp.urls')),
path('myapp/', include('myapp.urls')),
#path('admin/', admin.site.urls),
]
请注意,此解决方案会将整个django垄断到您饥饿又自私的应用程序中:-) !!!