我是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大师可以为我澄清这个!
这听起来很奇怪。
你的最新尝试应该有效,但我通常做的是 - 放
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的任何答案我以为我会提供一个。你必须使用''
作为根网址。以下是django 2.0 docs的一个例子
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')),
]
PS:始终建议使用命名空间。以后会给你一个很好的优势。
在App 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
这是我的项目结构: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进行了测试。